36 #ifndef ROS_INTROSPECTION_HELPER_H 37 #define ROS_INTROSPECTION_HELPER_H 50 "00010203040506070809" 51 "10111213141516171819" 52 "20212223242526272829" 53 "30313233343536373839" 54 "40414243444546474849" 55 "50515253545556575859" 56 "60616263646566676869" 57 "70717273747576777879" 58 "80818283848586878889" 59 "90919293949596979899";
62 buffer[0] =
static_cast<char>(
'0' + value);
65 else if (value < 100) {
67 buffer[0] = DIGITS[ value ];
68 buffer[1] = DIGITS[ value+1 ];
72 return sprintf( buffer,
"%d", value );
80 if ( offset +
sizeof(T) > buffer.
size() )
82 throw std::runtime_error(
"Buffer overrun in RosIntrospection::ReadFromBuffer");
84 destination = (*(
reinterpret_cast<const T*
>( &(buffer.
data()[offset]) ) ) );
90 uint32_t string_size = 0;
93 if( offset + string_size > buffer.
size())
95 throw std::runtime_error(
"Buffer overrun in RosIntrospection::ReadFromBuffer");
98 const char* buffer_ptr =
reinterpret_cast<const char*
>( &buffer[offset] );
99 offset += string_size;
101 destination.assign( buffer_ptr, string_size );
104 template <
typename T>
inline 116 case BOOL:
return ReadFromBufferToVariant<bool>(buffer,offset);
117 case CHAR:
return ReadFromBufferToVariant<char>(buffer,offset);
119 case UINT8:
return ReadFromBufferToVariant<uint8_t>(buffer,offset);
120 case UINT16:
return ReadFromBufferToVariant<uint16_t>(buffer,offset);
121 case UINT32:
return ReadFromBufferToVariant<uint32_t>(buffer,offset);
122 case UINT64:
return ReadFromBufferToVariant<uint64_t>(buffer,offset);
124 case INT8:
return ReadFromBufferToVariant<int8_t>(buffer,offset);
125 case INT16:
return ReadFromBufferToVariant<int16_t>(buffer,offset);
126 case INT32:
return ReadFromBufferToVariant<int32_t>(buffer,offset);
127 case INT64:
return ReadFromBufferToVariant<int64_t>(buffer,offset);
129 case FLOAT32:
return ReadFromBufferToVariant<float>(buffer,offset);
130 case FLOAT64:
return ReadFromBufferToVariant<double>(buffer,offset);
146 uint32_t string_size = 0;
148 if( offset + string_size > buffer.size()) {
149 throw std::runtime_error(
"Buffer overrun");
151 Variant var_string(reinterpret_cast<const char*>( &buffer[offset] ), string_size );
152 offset += string_size;
155 case OTHER:
return -1;
158 throw std::runtime_error(
"unsupported builtin type value");
int print_number(char *buffer, uint16_t value)
Variant ReadFromBufferToVariant(const absl::Span< uint8_t > &buffer, size_t &offset)
constexpr pointer data() const noexcept
constexpr size_type size() const noexcept
void ReadFromBuffer(const absl::Span< uint8_t > &buffer, size_t &offset, T &destination)