OpenDaVINCI  4.15.3
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 
84  private:
85 #ifndef WIN32
86 # if !defined(__OpenBSD__) && !defined(__NetBSD__)
87 # pragma GCC diagnostic push
88 # endif
89 # pragma GCC diagnostic ignored "-Wfloat-equal"
90 #endif
91 
99  template<typename T>
100  void visitPrimitiveDataType(std::shared_ptr<odcore::data::reflection::AbstractField> &f, T &v) {
101  // If T is != double but f->getFieldDataType() == double, we require a compiler cast.
102  double _v = 0;
103  if (f->getFieldDataType() == odcore::data::reflection::AbstractField::DOUBLE_T) {
104  _v = dynamic_cast<odcore::reflection::Field<double>*>(f.operator->())->getValue();
105  }
106 
107  // Set value from f to v (default case).
108  if (f->getFieldDataType() != odcore::data::reflection::AbstractField::DOUBLE_T) {
109  v = dynamic_cast<odcore::reflection::Field<T>*>(f.operator->())->getValue();
110  }
111  else { v = _v; }
112  }
113 #ifndef WIN32
114 # if !defined(__OpenBSD__) && !defined(__NetBSD__)
115 # pragma GCC diagnostic pop
116 # endif
117 #endif
118 
119  private:
120  Message m_message;
121  };
122 
123  }
124 } // odcore::reflection
125 
126 #endif /*OPENDAVINCI_CORE_REFLECTION_MESSAGETOVISITABLEVISITOR_H_*/
Definition: MessageToVisitableVisitor.h:42
Definition: Message.h:42
#define OPENDAVINCI_API
Definition: opendavinci.h:67
Definition: Visitor.h:37
Definition: Serializable.h:59
Definition: Field.h:36