deserializer.hpp
Go to the documentation of this file.
1 #ifndef DESERIALIZER_HPP
2 #define DESERIALIZER_HPP
3 
4 // API adapted to FastCDR
5 
6 #include <exception>
7 
10 
11 namespace eprosima::fastcdr
12 {
13 class FastBuffer;
14 class Cdr;
15 }
16 
17 namespace RosMsgParser
18 {
19 
21 {
22 public:
23 
25  {
26  _buffer = buffer;
27  reset();
28  }
29 
30  virtual ~Deserializer() = default;
31 
32  // move the memory pointer
33  virtual void jump(size_t bytes) = 0;
34 
35  // deserialize the current pointer into a variant (not a string)
36  virtual Variant deserialize(BuiltinType type) = 0;
37 
38  // deserialize the current pointer into a string
39  virtual void deserializeString(std::string& out) = 0;
40 
41  virtual uint32_t deserializeUInt32() = 0;
42 
43  virtual const uint8_t* getCurrentPtr() const = 0;
44 
45  virtual size_t bytesLeft() const
46  {
47  return _buffer.size() - ( getCurrentPtr() - _buffer.data() );
48  }
49 
50  // reset the pointer to beginning of buffer
51  virtual void reset() = 0;
52 
53 protected:
55 };
56 
57 //-----------------------------------------------------------------
58 
59 // Specialization od deserializer that works with ROS1
61 {
62 public:
63 
64  virtual Variant deserialize(BuiltinType type) override;
65 
66  virtual void deserializeString(std::string& dst) override;
67 
68  virtual uint32_t deserializeUInt32() override;
69 
70  virtual const uint8_t* getCurrentPtr() const override;
71 
72  void jump(size_t bytes) override;
73 
74  virtual void reset() override;
75 
76 protected:
77 
78  const uint8_t* _ptr;
79  size_t _bytes_left;
80 
81  template <typename T> T deserialize()
82  {
83  T out;
84  if ( sizeof(T) > _bytes_left )
85  {
86  throw std::runtime_error("Buffer overrun in Deserializer");
87  }
88  out = ( *(reinterpret_cast<const T*>( _ptr )) );
89  _bytes_left -= sizeof(T);
90  _ptr += sizeof(T);
91  return out;
92  }
93 };
94 
95 //-----------------------------------------------------------------
96 
97 // Specialization od deserializer that works with ROS2
98 // wrapping FastCDR
100 {
101 public:
102 
103  virtual Variant deserialize(BuiltinType type) override;
104 
105  virtual void deserializeString(std::string& dst) override;
106 
107  virtual uint32_t deserializeUInt32() override;
108 
109  virtual const uint8_t* getCurrentPtr() const override;
110 
111  void jump(size_t bytes) override;
112 
113  virtual void reset() override;
114 
115 protected:
116 
117  std::shared_ptr<eprosima::fastcdr::FastBuffer> _cdr_buffer;
118  std::shared_ptr<eprosima::fastcdr::Cdr> _cdr;
119 
120 };
121 
123 
124 }
125 
126 #endif // DESERIALIZER_HPP
virtual void init(Span< const uint8_t > buffer)
char * dst
Definition: lz4.h:724
Span< const uint8_t > _buffer
virtual size_t bytesLeft() const
type
Definition: core.h:1059
Definition: core.h:760
std::shared_ptr< eprosima::fastcdr::Cdr > _cdr
static unordered_set< string > deserialize(const QDomElement &elt)
Definition: format.h:2459
std::shared_ptr< eprosima::fastcdr::FastBuffer > _cdr_buffer


plotjuggler
Author(s): Davide Faconti
autogenerated on Mon Jun 19 2023 03:01:02