OpenDaVINCI  4.15.3
ProtoDeserializer.h
Go to the documentation of this file.
1 
20 #ifndef OPENDAVINCI_CORE_SERIALIZATION_PROTODESERIALIZER_H_
21 #define OPENDAVINCI_CORE_SERIALIZATION_PROTODESERIALIZER_H_
22 
23 #include <map>
24 #include <sstream>
25 #include <string>
26 #include <vector>
27 
32 
33 namespace odcore {
34  namespace serialization {
35 
36  using namespace std;
37 
42  class ProtoKeyValue {
43  public:
44  ProtoKeyValue();
45 
53  ProtoKeyValue(const uint32_t &key,
55  const uint64_t &length);
56 
65  ProtoKeyValue(const uint32_t &key,
67  const uint64_t &length,
68  const vector<char> &value);
69 
78  ProtoKeyValue(const uint32_t &key,
79  const uint64_t &value);
80 
81  uint32_t getKey() const;
82  ProtoSerializer::PROTOBUF_TYPE getType() const;
83  uint64_t getLength() const;
84 
91  uint64_t getValueAsVarInt() const;
92 
99  float getValueAsFloat() const;
100 
107  double getValueAsDouble() const;
108 
115  string getValueAsString() const;
116 
122  const vector<char>& getValue() const;
123 
129  vector<char>& getRawBuffer();
130 
131  private:
132  uint32_t m_key;
134  uint64_t m_length;
135  vector<char> m_value;
136  uint64_t m_varIntValue;
137  };
138 
144  private:
151 
157  ProtoDeserializer& operator=(const ProtoDeserializer &);
158 
159  public:
161 
167  ProtoDeserializer(istream &i);
168 
169  virtual ~ProtoDeserializer();
170 
171  virtual void deserializeDataFrom(istream &in);
172 
173  private:
181  uint8_t decodeVarInt(istream& in, uint64_t &value);
182 
189  int8_t decodeZigZag8(uint8_t value);
190 
197  int16_t decodeZigZag16(uint16_t value);
198 
205  int32_t decodeZigZag32(uint32_t value);
206 
213  int64_t decodeZigZag64(uint64_t value);
214 
215  public:
216  virtual uint32_t readValue(istream &i, Serializable &v);
217  virtual uint32_t readValue(istream &i, bool &v);
218  virtual uint32_t readValue(istream &i, char &v);
219  virtual uint32_t readValue(istream &i, unsigned char &v);
220  virtual uint32_t readValue(istream &i, int8_t &v);
221  virtual uint32_t readValue(istream &i, int16_t &v);
222  virtual uint32_t readValue(istream &i, uint16_t &v);
223  virtual uint32_t readValue(istream &i, int32_t &v);
224  virtual uint32_t readValue(istream &i, uint32_t &v);
225  virtual uint32_t readValue(istream &i, int64_t &v);
226  virtual uint32_t readValue(istream &i, uint64_t &v);
227  virtual uint32_t readValue(istream &i, float &v);
228  virtual uint32_t readValue(istream &i, double &v);
229  virtual uint32_t readValue(istream &i, string &v);
230  virtual uint32_t readValue(istream &i, void *data, const uint32_t &size);
231 
232  public:
233  virtual void read(const uint32_t &id, Serializable &s);
234  virtual void read(const uint32_t &id, bool &b);
235  virtual void read(const uint32_t &id, char &c);
236  virtual void read(const uint32_t &id, unsigned char &uc);
237  virtual void read(const uint32_t &id, int8_t &i);
238  virtual void read(const uint32_t &id, int16_t &i);
239  virtual void read(const uint32_t &id, uint16_t &ui);
240  virtual void read(const uint32_t &id, int32_t &i);
241  virtual void read(const uint32_t &id, uint32_t &ui);
242  virtual void read(const uint32_t &id, int64_t &i);
243  virtual void read(const uint32_t &id, uint64_t &ui);
244  virtual void read(const uint32_t &id, float &f);
245  virtual void read(const uint32_t &id, double &d);
246  virtual void read(const uint32_t &id, string &s);
247  virtual void read(const uint32_t &id, void *data, const uint32_t &size);
248 
249  public:
250  virtual void read(const uint32_t &id, const string &longName, const string &shortName, Serializable &s);
251  virtual void read(const uint32_t &id, const string &longName, const string &shortName, bool &b);
252  virtual void read(const uint32_t &id, const string &longName, const string &shortName, char &c);
253  virtual void read(const uint32_t &id, const string &longName, const string &shortName, unsigned char &uc);
254  virtual void read(const uint32_t &id, const string &longName, const string &shortName, int8_t &i);
255  virtual void read(const uint32_t &id, const string &longName, const string &shortName, int16_t &i);
256  virtual void read(const uint32_t &id, const string &longName, const string &shortName, uint16_t &ui);
257  virtual void read(const uint32_t &id, const string &longName, const string &shortName, int32_t &i);
258  virtual void read(const uint32_t &id, const string &longName, const string &shortName, uint32_t &ui);
259  virtual void read(const uint32_t &id, const string &longName, const string &shortName, int64_t &i);
260  virtual void read(const uint32_t &id, const string &longName, const string &shortName, uint64_t &ui);
261  virtual void read(const uint32_t &id, const string &longName, const string &shortName, float &f);
262  virtual void read(const uint32_t &id, const string &longName, const string &shortName, double &d);
263  virtual void read(const uint32_t &id, const string &longName, const string &shortName, string &s);
264  virtual void read(const uint32_t &id, const string &longName, const string &shortName, void *data, const uint32_t &size);
265 
266  private:
275  uint32_t readAndValidateKey(istream &in, const uint32_t &id, const ProtoSerializer::PROTOBUF_TYPE &expectedType);
276 
277  private:
278  stringstream m_buffer;
279  map<uint32_t, ProtoKeyValue> m_mapOfKeyValues;
280  };
281 
282  }
283 } // odcore::serialization
284 
285 #endif /*OPENDAVINCI_CORE_SERIALIZATION_PROTODESERIALIZER_H_*/
Definition: ProtoDeserializer.h:42
PROTOBUF_TYPE
Definition: ProtoSerializer.h:43
Definition: Serializable.h:59
Definition: ProtoDeserializer.h:143
Definition: Deserializer.h:39