deserializer.cpp
Go to the documentation of this file.
2 #include <fastcdr/Cdr.h>
3 
4 namespace RosMsgParser
5 {
6 
7 
9 {
10  switch(type)
11  {
12  case BOOL: return deserialize<bool>();
13  case CHAR: return deserialize<char>();
14  case BYTE:
15  case UINT8: return deserialize<uint8_t>();
16  case UINT16: return deserialize<uint16_t>();
17  case UINT32: return deserialize<uint32_t>();
18  case UINT64: return deserialize<uint64_t>();
19 
20  case INT8: return deserialize<int8_t>();
21  case INT16: return deserialize<int16_t>();
22  case INT32: return deserialize<int32_t>();
23  case INT64: return deserialize<int64_t>();
24 
25  case FLOAT32: return deserialize<float>();
26  case FLOAT64: return deserialize<double>();
27 
28  case DURATION:
29  case TIME: {
31  tmp.sec = deserialize<uint32_t>();
32  tmp.nsec = deserialize<uint32_t>();
33  return tmp;
34  }
35 
36  default:
37  std::runtime_error("ROS_Deserializer: type not recognized");
38  }
39 
40  return {};
41 }
42 
44 {
45  uint32_t string_size = deserialize<uint32_t>();
46 
47  if( string_size > _bytes_left )
48  {
49  throw std::runtime_error("Buffer overrun in RosMsgParser::ReadFromBuffer");
50  }
51 
52  if (string_size == 0) {
53  dst = {};
54  return;
55  }
56 
57  const char* buffer_ptr = reinterpret_cast<const char*>( _ptr );
58  dst.assign( buffer_ptr, string_size );
59 
60  _ptr += string_size;
61  _bytes_left -= string_size;
62 }
63 
65 {
66  return deserialize<uint32_t>();
67 }
68 
69 const uint8_t *ROS_Deserializer::getCurrentPtr() const
70 {
71  return _ptr;
72 }
73 
75 {
76  if( bytes > _bytes_left )
77  {
78  throw std::runtime_error("Buffer overrun");
79  }
80  _ptr += bytes;
81  _bytes_left -= bytes;
82 }
83 
85 {
86  _ptr = _buffer.data();
87  _bytes_left = _buffer.size();
88 }
89 
90 // ----------------------------------------------
91 
92 template <typename T>
94 {
95  T tmp;
96  cdr.deserialize(tmp);
97  return tmp;
98 }
99 
101 {
102  switch(type)
103  {
104  case BOOL: return Deserialize<bool>(*_cdr);
105  case CHAR: return Deserialize<char>(*_cdr);
106  case BYTE:
107  case UINT8: return Deserialize<uint8_t>(*_cdr);
108  case UINT16: return Deserialize<uint16_t>(*_cdr);
109  case UINT32: return Deserialize<uint32_t>(*_cdr);
110  case UINT64: return Deserialize<uint64_t>(*_cdr);
111 
112  case INT8: return Deserialize<int8_t>(*_cdr);
113  case INT16: return Deserialize<int16_t>(*_cdr);
114  case INT32: return Deserialize<int32_t>(*_cdr);
115  case INT64: return Deserialize<int64_t>(*_cdr);
116 
117  case FLOAT32: return Deserialize<float>(*_cdr);
118  case FLOAT64: return Deserialize<double>(*_cdr);
119 
120  case DURATION:
121  case TIME: {
122  RosMsgParser::Time tmp;
123  tmp.sec = Deserialize<uint32_t>(*_cdr);
124  tmp.nsec = Deserialize<uint32_t>(*_cdr);
125  return tmp;
126  }
127 
128  default:
129  throw std::runtime_error("FastCDR_Deserializer: type not recognized");
130  }
131 
132  return {};
133 }
134 
136 {
137  _cdr->deserialize(dst);
138 }
139 
141 {
142  return Deserialize<uint32_t>(*_cdr);
143 }
144 
146 {
147  return reinterpret_cast<const uint8_t *>(_cdr->getBufferPointer());
148 }
149 
151 {
152  _cdr->jump(bytes);
153 }
154 
156 {
157  using namespace eprosima::fastcdr;
158 
159  char* buffer_ptr = reinterpret_cast<char*>(const_cast<uint8_t*>(_buffer.data()));
160 
161  _cdr_buffer = std::make_shared<FastBuffer>(buffer_ptr, _buffer.size());
162  _cdr = std::make_shared<Cdr>(*_cdr_buffer, Cdr::DEFAULT_ENDIAN, Cdr::DDS_CDR);
163  _cdr->read_encapsulation();
164 }
165 
166 }
virtual void deserializeString(std::string &dst) override
virtual void reset() override
virtual void deserializeString(std::string &dst) override
char * dst
Definition: lz4.h:724
Span< const uint8_t > _buffer
virtual uint32_t deserializeUInt32() override
type
Definition: core.h:1059
virtual uint32_t deserializeUInt32() override
virtual void reset() override
virtual const uint8_t * getCurrentPtr() const override
This class offers an interface to serialize/deserialize some basic types using CDR protocol inside an...
Definition: Cdr.h:43
virtual const uint8_t * getCurrentPtr() const override
virtual Variant deserialize(BuiltinType type) override
void jump(size_t bytes) override
static T Deserialize(eprosima::fastcdr::Cdr &cdr)
Definition: format.h:2459
Cdr & deserialize(uint8_t &octet_t)
This function deserializes an octet.
Definition: Cdr.h:2035
void jump(size_t bytes) override


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