PVData C++  8.0.2
serializeHelper.h
1 /*
2  * Copyright information and license terms for this software can be
3  * found in the file LICENSE that is included with the distribution
4  */
5 /*
6  * serializeHelper.h
7  *
8  * Created on: Oct 21, 2010
9  * Author: Miha Vitorovic
10  */
11 
12 #ifndef SERIALIZEHELPER_H_
13 #define SERIALIZEHELPER_H_
14 
15 #include <pv/serialize.h>
16 #include <pv/byteBuffer.h>
17 #include <pv/noDefaultMethods.h>
18 #include <pv/pvIntrospect.h>
19 
20 #include <shareLib.h>
21 
22 namespace epics {
23  namespace pvData {
24 
25  /**
26  * @brief Serialization helper.
27  *
28  */
29  class epicsShareClass SerializeHelper {
30  EPICS_NOT_COPYABLE(SerializeHelper)
31  public:
32 
33  /**
34  * Serialize the specified array size into the specified
35  * buffer, flushing when necessary.
36  * The specified SerializableControl manages any flushing
37  * required.
38  *
39  * @param[in] s size to encode
40  * @param[in] buffer serialization buffer
41  * @param[in] flusher SerializableControl to manage the flushing
42  */
43  static void writeSize(std::size_t s, ByteBuffer* buffer,
44  SerializableControl* flusher);
45 
46  /**
47  * Deserialize array size.
48  * The specified DeserializableControl ensures
49  * sufficient bytes are available.
50  *
51  * @param[in] buffer deserialization buffer.
52  * @param[in] control the DeserializableControl.
53  * @returns array size.
54  */
55  static std::size_t readSize(ByteBuffer* buffer,
56  DeserializableControl* control);
57 
58  /**
59  * std::string serialization helper method.
60  *
61  * @param[in] value std::string to serialize
62  * @param[in] buffer serialization buffer
63  * @param[in] flusher flusher
64  */
65  static void serializeString(const std::string& value, ByteBuffer* buffer,
66  SerializableControl* flusher);
67 
68  /**
69  * std::string serialization helper method.
70  *
71  * @param[in] value std::string to serialize
72  * @param[in] offset start of the substring in value
73  * @param[in] count the number of characters to write
74  * @param[in] buffer serialization buffer
75  * @param[in] flusher flusher
76  */
77  static void serializeSubstring(const std::string& value, std::size_t offset,
78  std::size_t count, ByteBuffer* buffer,
79  SerializableControl* flusher);
80 
81  /**
82  * std::string deserialization helper method.
83  * TODO This method cannot return "null", but Java implementation
84  * could have serialized "null" value as well. We need to decide
85  * how to deserialize "null".
86  *
87  * @param[in] buffer deserialization buffer
88  * @param[in] control control
89  * @returns deserialized string
90  *
91  * @todo This method cannot return "null", but Java implementation
92  * could have serialized "null" value as well. We need to decide
93  * how to deserialize "null".
94  */
95  static std::string deserializeString(ByteBuffer* buffer,
96  DeserializableControl* control);
97 
98  private:
99  SerializeHelper() {};
100  ~SerializeHelper() {};
101 
102  /**
103  * Serialize array size.
104  *
105  * @param[in] s size to encode
106  * @param[in] buffer serialization buffer
107  */
108  static void writeSize(std::size_t s, ByteBuffer* buffer);
109 
110  };
111 
112  }
113 }
114 
115 #endif /* SERIALIZEHELPER_H_ */
#define EPICS_NOT_COPYABLE(CLASS)
Disable implicit copyable.