MeVisLab Toolbox Reference
mlObjMgrSubDataType.h
Go to the documentation of this file.
1 /*************************************************************************************
2 **
3 ** Copyright 2007, MeVis Medical Solutions AG
4 **
5 ** The user may use this file in accordance with the license agreement provided with
6 ** the Software or, alternatively, in accordance with the terms contained in a
7 ** written agreement between the user and MeVis Medical Solutions AG.
8 **
9 ** For further information use the contact form at https://www.mevislab.de/contact
10 **
11 **************************************************************************************/
12 
13 #ifndef ML_OBJ_MGR_SUB_DATA_TYPE_H
14 #define ML_OBJ_MGR_SUB_DATA_TYPE_H
15 
16 
18 
19 #include "MLObjMgrSystem.h"
20 
21 #include "mlObjMgrDataType.h"
22 #include <mlRuntimeSubClass.h>
23 
24 
26 // Macros
27 
28 #define QUOTE(data) #data
29 
30 #define DATA_TYPE_HEADER(dataTypeName, dataType) \
31  class MLOBJMGR_EXPORT omData_##dataTypeName : public omDataType \
32  { \
33  ML_CLASS_HEADER(omData_##dataTypeName) \
34  \
35  protected: \
36  \
37  dataType _value; \
38  \
39  public: \
40  \
41  omData_##dataTypeName() : omDataType() {} \
42  omData_##dataTypeName(const omData_##dataTypeName &type) : omDataType(), _value(type._value) {} \
43  omData_##dataTypeName(const dataType &value) : omDataType(), _value(value) {} \
44  inline omData_##dataTypeName &operator =(const omData_##dataTypeName &type) { \
45  assign(type._value); return *this; \
46  } \
47  inline omData_##dataTypeName &operator =(const dataType &value) { \
48  assign(value); return *this; \
49  } \
50  virtual void assign(const dataType &value) { \
51  _value = value; \
52  } \
53  inline operator dataType() const { \
54  return _value; \
55  } \
56  inline bool operator ==(const dataType &value) const { \
57  return _value == value; \
58  } \
59  inline bool operator !=(const dataType &value) const { \
60  return _value != value; \
61  } \
62  inline bool operator ==(const omData_##dataTypeName &value) const { \
63  return _value == value._value; \
64  } \
65  inline bool operator !=(const omData_##dataTypeName &value) const { \
66  return _value != value._value; \
67  } \
68  std::string getStringValue() const override; \
69  void setStringValue(const std::string &value) override; \
70  };
71 
72 #define DATA_TYPE_SOURCE(dataTypeName,dataType,getStringCode,setStringCode) \
73  ML_CLASS_SOURCE(omData_##dataTypeName, omDataType); \
74  std::string omData_##dataTypeName::getStringValue() const { \
75  getStringCode \
76  } \
77  void omData_##dataTypeName::setStringValue(const std::string &value) { \
78  setStringCode \
79  }
80 
81 #define DATA_OP_HEADER(dataTypeName, dataType, defaultValue) \
82  omData(const dataType &value) : _data(NULL) { \
83  assign(value); \
84  } \
85  omData &operator =(const dataType &value) { \
86  assign(value); return *this; \
87  } \
88  virtual void assign(const dataType &value); \
89  operator dataType() const { \
90  return (_data) ? (dataType)(*(omData_##dataTypeName *)_data) : defaultValue; \
91  } \
92  inline void set_##dataTypeName(const dataType &value) { \
93  *this = (const dataType &)value; \
94  } \
95  inline dataType get_##dataTypeName() const { \
96  return (_data) ? (dataType)(*(omData_##dataTypeName *)_data) : defaultValue; \
97  }
98 
99 #define DATA_OP_SOURCE(dataTypeName, dataType) \
100  void omData::assign(const dataType &value) { \
101  if(_data == NULL) { \
102  createDataType(QUOTE(omData_##dataTypeName)); \
103  \
104  if(_data == NULL) \
105  return; \
106  } \
107  \
108  *(omData_##dataTypeName *)_data = value; \
109  }
110 
111 #endif // __mlObjMgrSubDataType_H