Go to the documentation of this file.
8 #ifndef __SIM_DataUtils_h__
9 #define __SIM_DataUtils_h__
20 #define DECLARE_CLASSNAME(DataClass, SuperClass) \
22 typedef SuperClass BaseClass; \
23 typedef DataClass ThisClass; \
24 static inline UT_StringHolder classname() \
25 { return SYS_CONCAT(#DataClass,_UTsh); } \
26 const UT_String &getDataTypeSubclass() const override \
28 static UT_String theType(classname()); \
32 static void getDataTypeSuperclasses(UT_StringArray& classes) \
34 classes.append(SYS_CONCAT(#SuperClass,_UTsh)); \
35 SuperClass::getDataTypeSuperclasses(classes); \
45 #define DECLARE_STANDARD_GETCASTTOTYPE() \
47 void *getCastToType(const char *totype) const override \
49 if( strcmp(classname(), totype) == 0 ) \
50 return (void *)this; \
51 return BaseClass::getCastToType(totype); \
58 #define DECLARE_DATAFACTORY(DataClass, SuperClass, Description, DopParms) \
60 class DataClass##Factory : public SIM_DataFactory \
63 DataClass##Factory(SIM_Engine *engine) \
65 SYS_CONCAT(#DataClass,_UTsh), \
66 SYS_CONCAT(Description,_UTsh), \
67 DataClass::getDataTypeSuperclasses, \
68 DataClass::constructor, \
69 DataClass::destructor, \
70 DataClass::DopParms, \
73 ~DataClass##Factory() override \
76 static void createDataFactory(SIM_Engine *engine) \
78 SIM_DataFactory *factory; \
79 factory = new DataClass##Factory( \
81 SIM_DataFactoryCreator::addDataFactory \
84 friend class DataClass##Factory; \
86 DECLARE_CLASSNAME(DataClass, SuperClass); \
87 static SIM_Data *constructor(const SIM_DataFactory *factory) \
88 { return (BaseClass *)new \
89 DataClass(factory); } \
90 static void destructor(SIM_Data *data) \
91 { delete (DataClass *)data-> \
92 getPointerToType(#DataClass); } \
97 #define IMPLEMENT_DATAFACTORY(DataClass) \
98 static SIM_DataFactoryCreator \
99 DataClass##Creator(DataClass::createDataFactory);