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; \
25 static inline const UT_StringHolder &classname() \
27 static constexpr UT_StringLit theType(#DataClass); \
28 return theType.asHolder(); \
31 const UT_StringHolder &getDataTypeSubclass() const override \
36 static void getDataTypeSuperclasses(UT_StringArray& classes) \
38 static constexpr UT_StringLit theSuperType(#SuperClass); \
39 classes.append(theSuperType.asHolder()); \
40 SuperClass::getDataTypeSuperclasses(classes); \
50 #define DECLARE_STANDARD_GETCASTTOTYPE() \
52 void *getCastToType(const UT_StringRef &totype) const override \
54 if( classname() == totype ) \
55 return (void *)this; \
56 return BaseClass::getCastToType(totype); \
63 #define DECLARE_DATAFACTORY(DataClass, SuperClass, Description, DopParms) \
65 class DataClass##Factory : public SIM_DataFactory \
68 DataClass##Factory(SIM_Engine *engine) \
70 SYS_CONCAT(#DataClass,_UTsh), \
71 SYS_CONCAT(Description,_UTsh), \
72 DataClass::getDataTypeSuperclasses, \
73 DataClass::constructor, \
74 DataClass::destructor, \
75 DataClass::DopParms, \
78 ~DataClass##Factory() override \
81 static void createDataFactory(SIM_Engine *engine) \
83 SIM_DataFactory *factory; \
84 factory = new DataClass##Factory( \
86 SIM_DataFactoryCreator::addDataFactory \
89 friend class DataClass##Factory; \
91 DECLARE_CLASSNAME(DataClass, SuperClass); \
92 static SIM_Data *constructor(const SIM_DataFactory *factory) \
93 { return (BaseClass *)new \
94 DataClass(factory); } \
95 static void destructor(SIM_Data *data) \
96 { delete (DataClass *)data-> \
97 getPointerToType(#DataClass); } \
102 #define IMPLEMENT_DATAFACTORY(DataClass) \
103 static SIM_DataFactoryCreator \
104 DataClass##Creator(DataClass::createDataFactory);