MeVisLabToolboxReference
|
00001 // **InsertLicense** code 00002 //------------------------------------------------------------------------- 00005 00010 //------------------------------------------------------------------------- 00011 00012 #ifndef __mlObjMgrSubDataType_H 00013 #define __mlObjMgrSubDataType_H 00014 00015 #ifndef __MLObjMgrSystem_H 00016 #include "MLObjMgrSystem.h" 00017 #endif 00018 00019 #ifndef __mlObjMgrDataType_H 00020 #include "mlObjMgrDataType.h" 00021 #endif 00022 #ifndef __mlRuntimeSubClass_H 00023 #include <mlRuntimeSubClass.h> 00024 #endif 00025 00026 00028 // Macros 00029 00030 #define QUOTE(data) #data 00031 00032 #define DATA_TYPE_HEADER(dataType) \ 00033 class MLOBJMGR_EXPORT omData_##dataType : public omDataType \ 00034 { \ 00035 ML_CLASS_HEADER(omData_##dataType) \ 00036 \ 00037 protected: \ 00038 \ 00039 dataType _value; \ 00040 \ 00041 public: \ 00042 \ 00043 omData_##dataType() : omDataType() {} \ 00044 omData_##dataType(const omData_##dataType &type) : omDataType(), _value(type._value) {} \ 00045 omData_##dataType(const dataType &value) : omDataType(), _value(value) {} \ 00046 inline omData_##dataType &operator =(const omData_##dataType &type) { \ 00047 assign(type._value); return *this; \ 00048 } \ 00049 inline omData_##dataType &operator =(const dataType &value) { \ 00050 assign(value); return *this; \ 00051 } \ 00052 virtual void assign(const dataType &value) { \ 00053 _value = value; \ 00054 } \ 00055 inline operator dataType() const { \ 00056 return _value; \ 00057 } \ 00058 inline bool operator ==(const dataType &value) const { \ 00059 return _value == value; \ 00060 } \ 00061 inline bool operator !=(const dataType &value) const { \ 00062 return _value != value; \ 00063 } \ 00064 inline bool operator ==(const omData_##dataType &value) const { \ 00065 return _value == value._value; \ 00066 } \ 00067 inline bool operator !=(const omData_##dataType &value) const { \ 00068 return _value != value._value; \ 00069 } \ 00070 virtual std::string getStringValue() const; \ 00071 virtual void setStringValue(const std::string &value); \ 00072 }; 00073 00074 #define DATA_TYPE_SOURCE(dataType,getStringCode,setStringCode) \ 00075 ML_CLASS_SOURCE(omData_##dataType, omDataType); \ 00076 std::string omData_##dataType::getStringValue() const { \ 00077 getStringCode \ 00078 } \ 00079 void omData_##dataType::setStringValue(const std::string &value) { \ 00080 setStringCode \ 00081 } 00082 00083 #define DATA_OP_HEADER(dataType,defaultValue) \ 00084 omData(const dataType &value) : _data(NULL) { \ 00085 assign(value); \ 00086 } \ 00087 omData &operator =(const dataType &value) { \ 00088 assign(value); return *this; \ 00089 } \ 00090 virtual void assign(const dataType &value); \ 00091 operator dataType() const { \ 00092 return (_data) ? (dataType)(*(omData_##dataType *)_data) : defaultValue; \ 00093 } \ 00094 inline void set_##dataType(const dataType &value) { \ 00095 *this = (const dataType &)value; \ 00096 } \ 00097 inline dataType get_##dataType() const { \ 00098 return (_data) ? (dataType)(*(omData_##dataType *)_data) : defaultValue; \ 00099 } 00100 00101 #define DATA_OP_SOURCE(dataType) \ 00102 void omData::assign(const dataType &value) { \ 00103 if(_data == NULL) { \ 00104 createDataType(QUOTE(omData_##dataType)); \ 00105 \ 00106 if(_data == NULL) \ 00107 return; \ 00108 } \ 00109 \ 00110 *(omData_##dataType *)_data = value; \ 00111 } 00112 00113 #endif // __mlObjMgrSubDataType_H