OpenDaVINCI  4.16.0
MessageToVisitableVisitor.h
Go to the documentation of this file.
1 
20 #ifndef OPENDAVINCI_CORE_REFLECTION_MESSAGETOVISITABLEVISITOR_H_
21 #define OPENDAVINCI_CORE_REFLECTION_MESSAGETOVISITABLEVISITOR_H_
22 
23 #include <string>
24 
26 #include <memory>
30 #include "opendavinci/generated/odcore/data/reflection/AbstractField.h"
31 
32 namespace odcore { namespace serialization { class Serializable; } }
33 
34 namespace odcore {
35  namespace reflection {
36 
37  using namespace std;
38 
43  private:
50 
58 
59  public:
61 
62  virtual ~MessageToVisitableVisitor();
63 
64  public:
65  virtual void beginVisit(const int32_t &id, const string &shortName, const string &longName);
66  virtual void endVisit();
67 
68  virtual void visit(const uint32_t &id, const string &longName, const string &shortName, odcore::serialization::Serializable &v);
69  virtual void visit(const uint32_t &id, const string &longName, const string &shortName, bool &v);
70  virtual void visit(const uint32_t &id, const string &longName, const string &shortName, char &v);
71  virtual void visit(const uint32_t &id, const string &longName, const string &shortName, unsigned char &v);
72  virtual void visit(const uint32_t &id, const string &longName, const string &shortName, int8_t &v);
73  virtual void visit(const uint32_t &id, const string &longName, const string &shortName, int16_t &v);
74  virtual void visit(const uint32_t &id, const string &longName, const string &shortName, uint16_t &v);
75  virtual void visit(const uint32_t &id, const string &longName, const string &shortName, int32_t &v);
76  virtual void visit(const uint32_t &id, const string &longName, const string &shortName, uint32_t &v);
77  virtual void visit(const uint32_t &id, const string &longName, const string &shortName, int64_t &v);
78  virtual void visit(const uint32_t &id, const string &longName, const string &shortName, uint64_t &v);
79  virtual void visit(const uint32_t &id, const string &longName, const string &shortName, float &v);
80  virtual void visit(const uint32_t &id, const string &longName, const string &shortName, double &v);
81  virtual void visit(const uint32_t &id, const string &longName, const string &shortName, string &v);
82  virtual void visit(const uint32_t &id, const string &longName, const string &shortName, void *data, const uint32_t &size);
83  virtual void visit(const uint32_t &id, const string &longName, const string &shortName, void *data, const uint32_t &count, const odcore::TYPE_ &t);
84 
85  private:
86 #ifndef WIN32
87 # if !defined(__OpenBSD__) && !defined(__NetBSD__)
88 # pragma GCC diagnostic push
89 # endif
90 # pragma GCC diagnostic ignored "-Wfloat-equal"
91 #endif
92 
100  template<typename T>
101  void visitPrimitiveDataType(std::shared_ptr<odcore::data::reflection::AbstractField> &f, T &v) {
102  // If T is != double but f->getFieldDataType() == double, we require a compiler cast.
103  double _v = 0;
104  if (f->getFieldDataType() == odcore::data::reflection::AbstractField::DOUBLE_T) {
105  _v = dynamic_cast<odcore::reflection::Field<double>*>(f.operator->())->getValue();
106  }
107 
108  // Set value from f to v (default case).
109  if (f->getFieldDataType() != odcore::data::reflection::AbstractField::DOUBLE_T) {
110  v = dynamic_cast<odcore::reflection::Field<T>*>(f.operator->())->getValue();
111  }
112  else { v = _v; }
113  }
114 #ifndef WIN32
115 # if !defined(__OpenBSD__) && !defined(__NetBSD__)
116 # pragma GCC diagnostic pop
117 # endif
118 #endif
119 
120  private:
121  Message m_message;
122  };
123 
124  }
125 } // odcore::reflection
126 
127 #endif /*OPENDAVINCI_CORE_REFLECTION_MESSAGETOVISITABLEVISITOR_H_*/
Definition: opendavinci.h:111
Definition: MessageToVisitableVisitor.h:42
Definition: Message.h:42
#define OPENDAVINCI_API
Definition: opendavinci.h:67
TYPE_
Definition: opendavinci.h:96
Definition: Visitor.h:37
Definition: Serializable.h:59
Definition: Field.h:36