MeVisLabToolboxReference
MeVisLab/Standard/Sources/ML/MLObjMgr/ObjMgr/mlObjMgrSubDataType.h
Go to the documentation of this file.
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