libcluon  0.0.148
GenericMessage.hpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2017-2018 Christian Berger
3  *
4  * This Source Code Form is subject to the terms of the Mozilla Public
5  * License, v. 2.0. If a copy of the MPL was not distributed with this
6  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
7  */
8 
9 #ifndef CLUON_GENERICMESSAGE_HPP
10 #define CLUON_GENERICMESSAGE_HPP
11 
13 #include "cluon/MetaMessage.hpp"
14 #include "cluon/any/any.hpp"
15 #include "cluon/cluon.hpp"
16 #include "cluon/cluonDataStructures.hpp"
17 
18 #include <cstdint>
19 #include <string>
20 #include <unordered_map>
21 #include <vector>
22 
23 namespace cluon {
171  private:
172  class GenericMessageVisitor {
173  private:
174  GenericMessageVisitor(const GenericMessageVisitor &) = delete;
175  GenericMessageVisitor(GenericMessageVisitor &&) = delete;
176  GenericMessageVisitor &operator=(const GenericMessageVisitor &) = delete;
177  GenericMessageVisitor &operator=(GenericMessageVisitor &&) = delete;
178 
179  public:
180  GenericMessageVisitor() = default;
181 
182  public:
183  // The following methods are provided to allow an instance of this class to
184  // be used as visitor for an instance with the method signature void accept<T>(T&);
185  void preVisit(int32_t id, const std::string &shortName, const std::string &longName) noexcept;
186  void postVisit() noexcept;
187 
188  void visit(uint32_t id, std::string &&typeName, std::string &&name, bool &v) noexcept;
189  void visit(uint32_t id, std::string &&typeName, std::string &&name, char &v) noexcept;
190  void visit(uint32_t id, std::string &&typeName, std::string &&name, int8_t &v) noexcept;
191  void visit(uint32_t id, std::string &&typeName, std::string &&name, uint8_t &v) noexcept;
192  void visit(uint32_t id, std::string &&typeName, std::string &&name, int16_t &v) noexcept;
193  void visit(uint32_t id, std::string &&typeName, std::string &&name, uint16_t &v) noexcept;
194  void visit(uint32_t id, std::string &&typeName, std::string &&name, int32_t &v) noexcept;
195  void visit(uint32_t id, std::string &&typeName, std::string &&name, uint32_t &v) noexcept;
196  void visit(uint32_t id, std::string &&typeName, std::string &&name, int64_t &v) noexcept;
197  void visit(uint32_t id, std::string &&typeName, std::string &&name, uint64_t &v) noexcept;
198  void visit(uint32_t id, std::string &&typeName, std::string &&name, float &v) noexcept;
199  void visit(uint32_t id, std::string &&typeName, std::string &&name, double &v) noexcept;
200  void visit(uint32_t id, std::string &&typeName, std::string &&name, std::string &v) noexcept;
201 
202  template <typename T>
203  void visit(uint32_t &id, std::string &&typeName, std::string &&name, T &value) noexcept {
205  mf.fieldIdentifier(id).fieldDataType(cluon::MetaMessage::MetaField::MESSAGE_T).fieldDataTypeName(typeName).fieldName(name);
206 
207  GenericMessage gm;
208  gm.createFrom<T>(value);
209 
210  m_intermediateDataRepresentation[mf.fieldIdentifier()] = linb::any{gm};
211  m_metaMessage.add(std::move(mf));
212  }
213 
214  public:
218  MetaMessage metaMessage() const noexcept;
219 
223  std::unordered_map<uint32_t, linb::any, UseUInt32ValueAsHashKey> intermediateDataRepresentation() const noexcept;
224 
225  private:
226  MetaMessage m_metaMessage{};
227  std::unordered_map<uint32_t, linb::any, UseUInt32ValueAsHashKey> m_intermediateDataRepresentation;
228  };
229 
230  private:
231  GenericMessage &operator=(GenericMessage &&) = delete;
232 
233  public:
234  GenericMessage() = default;
235  GenericMessage(GenericMessage &&) = default;
236  GenericMessage(const GenericMessage &) = default;
237  GenericMessage &operator=(const GenericMessage &) = default;
238 
239  public:
240  int32_t ID();
241  const std::string ShortName();
242  const std::string LongName();
243 
244  public:
250  template <typename T>
251  void createFrom(T &msg) {
252  GenericMessageVisitor gmv;
253  msg.accept(gmv);
254 
255  m_metaMessage = gmv.metaMessage();
256  m_intermediateDataRepresentation.clear();
257  m_intermediateDataRepresentation = gmv.intermediateDataRepresentation();
258  }
259 
267  void createFrom(const MetaMessage &mm, const std::vector<MetaMessage> &mms) noexcept;
268 
269  public:
270  // The following methods are provided to allow an instance of this class to
271  // be used as visitor for an instance with the method signature void accept<T>(T&);
272  void preVisit(int32_t id, const std::string &shortName, const std::string &longName) noexcept;
273  void postVisit() noexcept;
274 
275  void visit(uint32_t id, std::string &&typeName, std::string &&name, bool &v) noexcept;
276  void visit(uint32_t id, std::string &&typeName, std::string &&name, char &v) noexcept;
277  void visit(uint32_t id, std::string &&typeName, std::string &&name, int8_t &v) noexcept;
278  void visit(uint32_t id, std::string &&typeName, std::string &&name, uint8_t &v) noexcept;
279  void visit(uint32_t id, std::string &&typeName, std::string &&name, int16_t &v) noexcept;
280  void visit(uint32_t id, std::string &&typeName, std::string &&name, uint16_t &v) noexcept;
281  void visit(uint32_t id, std::string &&typeName, std::string &&name, int32_t &v) noexcept;
282  void visit(uint32_t id, std::string &&typeName, std::string &&name, uint32_t &v) noexcept;
283  void visit(uint32_t id, std::string &&typeName, std::string &&name, int64_t &v) noexcept;
284  void visit(uint32_t id, std::string &&typeName, std::string &&name, uint64_t &v) noexcept;
285  void visit(uint32_t id, std::string &&typeName, std::string &&name, float &v) noexcept;
286  void visit(uint32_t id, std::string &&typeName, std::string &&name, double &v) noexcept;
287  void visit(uint32_t id, std::string &&typeName, std::string &&name, std::string &v) noexcept;
288 
289  template <typename T>
290  void visit(uint32_t &id, std::string &&typeName, std::string &&name, T &value) noexcept {
291  (void)typeName;
292  (void)name;
293  if (0 < m_intermediateDataRepresentation.count(id)) {
294  try {
295  auto &v = linb::any_cast<cluon::GenericMessage &>(m_intermediateDataRepresentation[id]);
296  value.accept(v);
297  } catch (const linb::bad_any_cast &) { // LCOV_EXCL_LINE
298  }
299  }
300  }
301 
302  public:
310  template<class Visitor>
311  inline void accept(uint32_t fieldId, Visitor &visitor) {
312  const bool VISIT_ALL{false};
313  accept<Visitor>(fieldId, visitor, VISIT_ALL);
314  }
315 
322  template <class Visitor>
323  void accept(Visitor &visitor) {
324  const uint32_t FIELD_ID{0};
325  const bool VISIT_ALL{true};
326  accept<Visitor>(FIELD_ID, visitor, VISIT_ALL);
327  }
328 
337  template <class PreVisitor, class Visitor, class PostVisitor>
338  void accept(PreVisitor &&_preVisit, Visitor &&_visit, PostVisitor &&_postVisit) {
339  std::forward<PreVisitor>(_preVisit)(m_metaMessage.messageIdentifier(), m_metaMessage.messageName(), m_longName);
340 
341  for (const auto &f : m_metaMessage.listOfMetaFields()) {
342  if (f.fieldDataType() == MetaMessage::MetaField::BOOL_T && (0 < m_intermediateDataRepresentation.count(f.fieldIdentifier()))) {
343  try {
344  auto &v = linb::any_cast<bool &>(m_intermediateDataRepresentation[f.fieldIdentifier()]);
345  doTripletForwardVisit(f.fieldIdentifier(), std::move(f.fieldDataTypeName()), std::move(f.fieldName()), v, _preVisit, _visit, _postVisit);
346  } catch (const linb::bad_any_cast &) { // LCOV_EXCL_LINE
347  }
348  } else if (f.fieldDataType() == MetaMessage::MetaField::CHAR_T && (0 < m_intermediateDataRepresentation.count(f.fieldIdentifier()))) {
349  try {
350  auto &v = linb::any_cast<char &>(m_intermediateDataRepresentation[f.fieldIdentifier()]);
351  doTripletForwardVisit(f.fieldIdentifier(), std::move(f.fieldDataTypeName()), std::move(f.fieldName()), v, _preVisit, _visit, _postVisit);
352  } catch (const linb::bad_any_cast &) { // LCOV_EXCL_LINE
353  }
354  } else if (f.fieldDataType() == MetaMessage::MetaField::UINT8_T && (0 < m_intermediateDataRepresentation.count(f.fieldIdentifier()))) {
355  try {
356  auto &v = linb::any_cast<uint8_t &>(m_intermediateDataRepresentation[f.fieldIdentifier()]);
357  doTripletForwardVisit(f.fieldIdentifier(), std::move(f.fieldDataTypeName()), std::move(f.fieldName()), v, _preVisit, _visit, _postVisit);
358  } catch (const linb::bad_any_cast &) { // LCOV_EXCL_LINE
359  }
360  } else if (f.fieldDataType() == MetaMessage::MetaField::INT8_T && (0 < m_intermediateDataRepresentation.count(f.fieldIdentifier()))) {
361  try {
362  auto &v = linb::any_cast<int8_t &>(m_intermediateDataRepresentation[f.fieldIdentifier()]);
363  doTripletForwardVisit(f.fieldIdentifier(), std::move(f.fieldDataTypeName()), std::move(f.fieldName()), v, _preVisit, _visit, _postVisit);
364  } catch (const linb::bad_any_cast &) { // LCOV_EXCL_LINE
365  }
366  } else if (f.fieldDataType() == MetaMessage::MetaField::UINT16_T && (0 < m_intermediateDataRepresentation.count(f.fieldIdentifier()))) {
367  try {
368  auto &v = linb::any_cast<uint16_t &>(m_intermediateDataRepresentation[f.fieldIdentifier()]);
369  doTripletForwardVisit(f.fieldIdentifier(), std::move(f.fieldDataTypeName()), std::move(f.fieldName()), v, _preVisit, _visit, _postVisit);
370  } catch (const linb::bad_any_cast &) { // LCOV_EXCL_LINE
371  }
372  } else if (f.fieldDataType() == MetaMessage::MetaField::INT16_T && (0 < m_intermediateDataRepresentation.count(f.fieldIdentifier()))) {
373  try {
374  auto &v = linb::any_cast<int16_t &>(m_intermediateDataRepresentation[f.fieldIdentifier()]);
375  doTripletForwardVisit(f.fieldIdentifier(), std::move(f.fieldDataTypeName()), std::move(f.fieldName()), v, _preVisit, _visit, _postVisit);
376  } catch (const linb::bad_any_cast &) { // LCOV_EXCL_LINE
377  }
378  } else if (f.fieldDataType() == MetaMessage::MetaField::UINT32_T && (0 < m_intermediateDataRepresentation.count(f.fieldIdentifier()))) {
379  try {
380  auto &v = linb::any_cast<uint32_t &>(m_intermediateDataRepresentation[f.fieldIdentifier()]);
381  doTripletForwardVisit(f.fieldIdentifier(), std::move(f.fieldDataTypeName()), std::move(f.fieldName()), v, _preVisit, _visit, _postVisit);
382  } catch (const linb::bad_any_cast &) { // LCOV_EXCL_LINE
383  }
384  } else if (f.fieldDataType() == MetaMessage::MetaField::INT32_T && (0 < m_intermediateDataRepresentation.count(f.fieldIdentifier()))) {
385  try {
386  auto &v = linb::any_cast<int32_t &>(m_intermediateDataRepresentation[f.fieldIdentifier()]);
387  doTripletForwardVisit(f.fieldIdentifier(), std::move(f.fieldDataTypeName()), std::move(f.fieldName()), v, _preVisit, _visit, _postVisit);
388  } catch (const linb::bad_any_cast &) { // LCOV_EXCL_LINE
389  }
390  } else if (f.fieldDataType() == MetaMessage::MetaField::UINT64_T && (0 < m_intermediateDataRepresentation.count(f.fieldIdentifier()))) {
391  try {
392  auto &v = linb::any_cast<uint64_t &>(m_intermediateDataRepresentation[f.fieldIdentifier()]);
393  doTripletForwardVisit(f.fieldIdentifier(), std::move(f.fieldDataTypeName()), std::move(f.fieldName()), v, _preVisit, _visit, _postVisit);
394  } catch (const linb::bad_any_cast &) { // LCOV_EXCL_LINE
395  }
396  } else if (f.fieldDataType() == MetaMessage::MetaField::INT64_T && (0 < m_intermediateDataRepresentation.count(f.fieldIdentifier()))) {
397  try {
398  auto &v = linb::any_cast<int64_t &>(m_intermediateDataRepresentation[f.fieldIdentifier()]);
399  doTripletForwardVisit(f.fieldIdentifier(), std::move(f.fieldDataTypeName()), std::move(f.fieldName()), v, _preVisit, _visit, _postVisit);
400  } catch (const linb::bad_any_cast &) { // LCOV_EXCL_LINE
401  }
402  } else if (f.fieldDataType() == MetaMessage::MetaField::FLOAT_T && (0 < m_intermediateDataRepresentation.count(f.fieldIdentifier()))) {
403  try {
404  auto &v = linb::any_cast<float &>(m_intermediateDataRepresentation[f.fieldIdentifier()]);
405  doTripletForwardVisit(f.fieldIdentifier(), std::move(f.fieldDataTypeName()), std::move(f.fieldName()), v, _preVisit, _visit, _postVisit);
406  } catch (const linb::bad_any_cast &) { // LCOV_EXCL_LINE
407  }
408  } else if (f.fieldDataType() == MetaMessage::MetaField::DOUBLE_T && (0 < m_intermediateDataRepresentation.count(f.fieldIdentifier()))) {
409  try {
410  auto &v = linb::any_cast<double &>(m_intermediateDataRepresentation[f.fieldIdentifier()]);
411  doTripletForwardVisit(f.fieldIdentifier(), std::move(f.fieldDataTypeName()), std::move(f.fieldName()), v, _preVisit, _visit, _postVisit);
412  } catch (const linb::bad_any_cast &) { // LCOV_EXCL_LINE
413  }
414  } else if (((f.fieldDataType() == MetaMessage::MetaField::STRING_T) || (f.fieldDataType() == MetaMessage::MetaField::BYTES_T))
415  && (0 < m_intermediateDataRepresentation.count(f.fieldIdentifier()))) {
416  try {
417  auto &v = linb::any_cast<std::string &>(m_intermediateDataRepresentation[f.fieldIdentifier()]);
418  doTripletForwardVisit(f.fieldIdentifier(), std::move(f.fieldDataTypeName()), std::move(f.fieldName()), v, _preVisit, _visit, _postVisit);
419  } catch (const linb::bad_any_cast &) { // LCOV_EXCL_LINE
420  }
421  } else if (f.fieldDataType() == MetaMessage::MetaField::MESSAGE_T && (0 < m_intermediateDataRepresentation.count(f.fieldIdentifier()))) {
422  try {
423  auto &v = linb::any_cast<cluon::GenericMessage &>(m_intermediateDataRepresentation[f.fieldIdentifier()]);
424  doTripletForwardVisit(f.fieldIdentifier(), std::move(f.fieldDataTypeName()), std::move(f.fieldName()), v, _preVisit, _visit, _postVisit);
425  } catch (const linb::bad_any_cast &) { // LCOV_EXCL_LINE
426  }
427  }
428  }
429 
430  std::forward<PostVisitor>(_postVisit)();
431  }
432 
433  private:
434  template<class Visitor>
435  inline void accept(uint32_t fieldId, Visitor &visitor, bool visitAll) {
436  visitor.preVisit(ID(), ShortName(), LongName());
437 
438  for (const auto &f : m_metaMessage.listOfMetaFields()) {
439  if (visitAll || (fieldId == f.fieldIdentifier())) {
440  if (f.fieldDataType() == MetaMessage::MetaField::BOOL_T && (0 < m_intermediateDataRepresentation.count(f.fieldIdentifier()))) {
441  try {
442  auto &v = linb::any_cast<bool &>(m_intermediateDataRepresentation[f.fieldIdentifier()]);
443  doVisit(f.fieldIdentifier(), std::move(f.fieldDataTypeName()), std::move(f.fieldName()), v, visitor);
444  } catch (const linb::bad_any_cast &) { // LCOV_EXCL_LINE
445  }
446  } else if (f.fieldDataType() == MetaMessage::MetaField::CHAR_T && (0 < m_intermediateDataRepresentation.count(f.fieldIdentifier()))) {
447  try {
448  auto &v = linb::any_cast<char &>(m_intermediateDataRepresentation[f.fieldIdentifier()]);
449  doVisit(f.fieldIdentifier(), std::move(f.fieldDataTypeName()), std::move(f.fieldName()), v, visitor);
450  } catch (const linb::bad_any_cast &) { // LCOV_EXCL_LINE
451  }
452  } else if (f.fieldDataType() == MetaMessage::MetaField::UINT8_T && (0 < m_intermediateDataRepresentation.count(f.fieldIdentifier()))) {
453  try {
454  auto &v = linb::any_cast<uint8_t &>(m_intermediateDataRepresentation[f.fieldIdentifier()]);
455  doVisit(f.fieldIdentifier(), std::move(f.fieldDataTypeName()), std::move(f.fieldName()), v, visitor);
456  } catch (const linb::bad_any_cast &) { // LCOV_EXCL_LINE
457  }
458  } else if (f.fieldDataType() == MetaMessage::MetaField::INT8_T && (0 < m_intermediateDataRepresentation.count(f.fieldIdentifier()))) {
459  try {
460  auto &v = linb::any_cast<int8_t &>(m_intermediateDataRepresentation[f.fieldIdentifier()]);
461  doVisit(f.fieldIdentifier(), std::move(f.fieldDataTypeName()), std::move(f.fieldName()), v, visitor);
462  } catch (const linb::bad_any_cast &) { // LCOV_EXCL_LINE
463  }
464  } else if (f.fieldDataType() == MetaMessage::MetaField::UINT16_T && (0 < m_intermediateDataRepresentation.count(f.fieldIdentifier()))) {
465  try {
466  auto &v = linb::any_cast<uint16_t &>(m_intermediateDataRepresentation[f.fieldIdentifier()]);
467  doVisit(f.fieldIdentifier(), std::move(f.fieldDataTypeName()), std::move(f.fieldName()), v, visitor);
468  } catch (const linb::bad_any_cast &) { // LCOV_EXCL_LINE
469  }
470  } else if (f.fieldDataType() == MetaMessage::MetaField::INT16_T && (0 < m_intermediateDataRepresentation.count(f.fieldIdentifier()))) {
471  try {
472  auto &v = linb::any_cast<int16_t &>(m_intermediateDataRepresentation[f.fieldIdentifier()]);
473  doVisit(f.fieldIdentifier(), std::move(f.fieldDataTypeName()), std::move(f.fieldName()), v, visitor);
474  } catch (const linb::bad_any_cast &) { // LCOV_EXCL_LINE
475  }
476  } else if (f.fieldDataType() == MetaMessage::MetaField::UINT32_T && (0 < m_intermediateDataRepresentation.count(f.fieldIdentifier()))) {
477  try {
478  auto &v = linb::any_cast<uint32_t &>(m_intermediateDataRepresentation[f.fieldIdentifier()]);
479  doVisit(f.fieldIdentifier(), std::move(f.fieldDataTypeName()), std::move(f.fieldName()), v, visitor);
480  } catch (const linb::bad_any_cast &) { // LCOV_EXCL_LINE
481  }
482  } else if (f.fieldDataType() == MetaMessage::MetaField::INT32_T && (0 < m_intermediateDataRepresentation.count(f.fieldIdentifier()))) {
483  try {
484  auto &v = linb::any_cast<int32_t &>(m_intermediateDataRepresentation[f.fieldIdentifier()]);
485  doVisit(f.fieldIdentifier(), std::move(f.fieldDataTypeName()), std::move(f.fieldName()), v, visitor);
486  } catch (const linb::bad_any_cast &) { // LCOV_EXCL_LINE
487  }
488  } else if (f.fieldDataType() == MetaMessage::MetaField::UINT64_T && (0 < m_intermediateDataRepresentation.count(f.fieldIdentifier()))) {
489  try {
490  auto &v = linb::any_cast<uint64_t &>(m_intermediateDataRepresentation[f.fieldIdentifier()]);
491  doVisit(f.fieldIdentifier(), std::move(f.fieldDataTypeName()), std::move(f.fieldName()), v, visitor);
492  } catch (const linb::bad_any_cast &) { // LCOV_EXCL_LINE
493  }
494  } else if (f.fieldDataType() == MetaMessage::MetaField::INT64_T && (0 < m_intermediateDataRepresentation.count(f.fieldIdentifier()))) {
495  try {
496  auto &v = linb::any_cast<int64_t &>(m_intermediateDataRepresentation[f.fieldIdentifier()]);
497  doVisit(f.fieldIdentifier(), std::move(f.fieldDataTypeName()), std::move(f.fieldName()), v, visitor);
498  } catch (const linb::bad_any_cast &) { // LCOV_EXCL_LINE
499  }
500  } else if (f.fieldDataType() == MetaMessage::MetaField::FLOAT_T && (0 < m_intermediateDataRepresentation.count(f.fieldIdentifier()))) {
501  try {
502  auto &v = linb::any_cast<float &>(m_intermediateDataRepresentation[f.fieldIdentifier()]);
503  doVisit(f.fieldIdentifier(), std::move(f.fieldDataTypeName()), std::move(f.fieldName()), v, visitor);
504  } catch (const linb::bad_any_cast &) { // LCOV_EXCL_LINE
505  }
506  } else if (f.fieldDataType() == MetaMessage::MetaField::DOUBLE_T && (0 < m_intermediateDataRepresentation.count(f.fieldIdentifier()))) {
507  try {
508  auto &v = linb::any_cast<double &>(m_intermediateDataRepresentation[f.fieldIdentifier()]);
509  doVisit(f.fieldIdentifier(), std::move(f.fieldDataTypeName()), std::move(f.fieldName()), v, visitor);
510  } catch (const linb::bad_any_cast &) { // LCOV_EXCL_LINE
511  }
512  } else if (((f.fieldDataType() == MetaMessage::MetaField::STRING_T) || (f.fieldDataType() == MetaMessage::MetaField::BYTES_T))
513  && (0 < m_intermediateDataRepresentation.count(f.fieldIdentifier()))) {
514  try {
515  auto &v = linb::any_cast<std::string &>(m_intermediateDataRepresentation[f.fieldIdentifier()]);
516  doVisit(f.fieldIdentifier(), std::move(f.fieldDataTypeName()), std::move(f.fieldName()), v, visitor);
517  } catch (const linb::bad_any_cast &) { // LCOV_EXCL_LINE
518  }
519  } else if (f.fieldDataType() == MetaMessage::MetaField::MESSAGE_T && (0 < m_intermediateDataRepresentation.count(f.fieldIdentifier()))) {
520  try {
521  auto &v = linb::any_cast<cluon::GenericMessage &>(m_intermediateDataRepresentation[f.fieldIdentifier()]);
522  doVisit(f.fieldIdentifier(), std::move(f.fieldDataTypeName()), std::move(f.fieldName()), v, visitor);
523  } catch (const linb::bad_any_cast &) { // LCOV_EXCL_LINE
524  }
525  }
526  // End processing in case of visiting specific fields.
527  if (!visitAll && (fieldId == f.fieldIdentifier())) {
528  break;
529  }
530  }
531  }
532 
533  visitor.postVisit();
534  }
535 
536  private:
537  MetaMessage m_metaMessage{};
538  std::vector<MetaMessage> m_scopeOfMetaMessages{};
539  std::unordered_map<std::string, MetaMessage> m_mapForScopeOfMetaMessages{};
540  std::string m_longName{""};
541  std::unordered_map<uint32_t, linb::any, UseUInt32ValueAsHashKey> m_intermediateDataRepresentation;
542 };
543 } // namespace cluon
544 
545 template <>
546 struct isVisitable<cluon::GenericMessage> {
547  static const bool value = true;
548 };
549 template <>
550 struct isTripletForwardVisitable<cluon::GenericMessage> {
551  static const bool value = true;
552 };
553 #endif
Definition: MetaMessage.hpp:48
Definition: cluon.hpp:65
Definition: MetaMessage.hpp:39
return mm
Definition: MessageParser.cpp:257
#define LIBCLUON_API
Definition: cluon.hpp:56
Definition: GenericMessage.hpp:170
Definition: MetaMessage.hpp:31
Definition: MetaMessage.hpp:45
Definition: MetaMessage.hpp:37
void accept(Visitor &visitor)
Definition: GenericMessage.hpp:323
Definition: MetaMessage.hpp:38
Definition: MetaMessage.hpp:44
uint32_t fieldIdentifier() const noexcept
Definition: MetaMessage.cpp:40
Definition: MetaMessage.hpp:41
Definition: MetaMessage.hpp:46
Definition: MetaMessage.hpp:36
Definition: MetaMessage.hpp:35
Definition: MetaMessage.hpp:43
Definition: MetaMessage.hpp:42
Definition: MetaMessage.hpp:40
Definition: MetaMessage.hpp:25
Definition: MetaMessage.hpp:47
void visit(uint32_t &id, std::string &&typeName, std::string &&name, T &value) noexcept
Definition: GenericMessage.hpp:290
void accept(PreVisitor &&_preVisit, Visitor &&_visit, PostVisitor &&_postVisit)
Definition: GenericMessage.hpp:338
void accept(uint32_t fieldId, Visitor &visitor)
Definition: GenericMessage.hpp:311
Definition: MetaMessage.hpp:34
MetaMessage::MetaField mf
Definition: MessageParser.cpp:243
void createFrom(T &msg)
Definition: GenericMessage.hpp:251