25 #include <unordered_set> 34 std::shared_ptr<MessageSchema>
schema;
38 std::vector< std::pair<FieldsVector, Variant> >
value;
41 std::vector< std::pair<FieldsVector, std::string> >
name;
45 std::vector< std::pair<FieldsVector, Span<const uint8_t>>>
blob;
63 Parser(
const std::string& topic_name,
68 DISCARD_LARGE_ARRAYS =
true,
69 KEEP_LARGE_ARRAYS =
false 76 _discard_large_array = discard_entire_array;
77 _max_array_size = max_array_size;
78 if( _max_array_size > 10000 )
80 throw std::runtime_error(
"max_array_size limited to 10000 at most");
86 return _discard_large_array;
91 return _max_array_size;
96 STORE_BLOB_AS_REFERENCE};
104 _blob_policy = policy;
115 const std::shared_ptr<MessageSchema>& getSchema()
const;
158 void applyVisitorToBuffer(
const ROSType &msg_type,
189 template <
class DeserializerT>
196 _deserializer = std::make_unique<DeserializerT>();
201 const std::string& definition)
203 if (_pack.count(topic_name) == 0)
207 _pack.insert({ topic_name,
std::move(pack) });
213 auto it = _pack.find(topic_name);
214 if (it != _pack.end())
216 return &it->second.parser;
224 auto it = _pack.find(topic_name);
225 if (it != _pack.end())
241 std::unordered_map<std::string, CachedPack>
_pack;
std::vector< std::pair< FieldsVector, std::string > > name
List of all those parsed fields that can be represented by a "string".
size_t maxArraySize() const
std::vector< std::pair< FieldsVector, Span< const uint8_t > > > blob
std::shared_ptr< MessageSchema > _schema
bool deserialize(Span< const uint8_t > buffer, FlatMessage *flat_output, Deserializer *deserializer) const
deserializeIntoFlatContainer takes a raw buffer of memory and extract information from it...
std::vector< uint8_t > _buffer
std::shared_ptr< ROSMessage > Ptr
BlobPolicy blobPolicy() const
std::unique_ptr< Deserializer > _deserializer
const FlatMessage * deserialize(const std::string &topic_name, Span< const uint8_t > buffer)
std::unique_ptr< Deserializer > _deserializer
void setWarningsStream(std::ostream *output)
Change where the warning messages are displayed.
void registerParser(const std::string &topic_name, const ROSType &msg_type, const std::string &definition)
std::vector< std::pair< std::string, double > > RenamedValues
void setBlobPolicy(BlobPolicy policy)
MaxArrayPolicy _discard_large_array
std::ostream * _global_warnings
const T & move(const T &v)
std::vector< std::string > _formatted_string
std::shared_ptr< MessageSchema > schema
std::unordered_map< std::string, CachedPack > _pack
void setMaxArrayPolicy(MaxArrayPolicy discard_entire_array, size_t max_array_size)
std::vector< std::vector< uint8_t > > blob_storage
static unordered_set< string > deserialize(const QDomElement &elt)
std::vector< int > _alias_array_pos
std::function< void(const ROSType &, Span< uint8_t > &)> VisitingCallback
static const char * output
const char * definition()
std::shared_ptr< ROSField > _dummy_root_field
std::vector< int8_t > _substituted
std::vector< std::pair< FieldsVector, Variant > > value
void CreateRenamedValues(const FlatMessage &flat_msg, RenamedValues &renamed)
const Parser * getParser(const std::string &topic_name) const
MaxArrayPolicy maxArrayPolicy() const