Changeset 5655 in orxonox.OLD for trunk/src/util/loading/load_param.h
- Timestamp:
- Nov 20, 2005, 9:22:11 PM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/util/loading/load_param.h
r5654 r5655 46 46 */ 47 47 #define LoadParamNEW(ROOT, PARAMETER_NAME, OBJECT, CLASS, FUNCTION) \ 48 LoadParam Base(ROOT, PARAMETER_NAME, OBJECT, ExecutorObjective<CLASS>(&CLASS::FUNCTION), false)48 LoadParam(ROOT, PARAMETER_NAME, OBJECT, ExecutorObjective<CLASS>(&CLASS::FUNCTION), false) 49 49 50 50 #define LoadParam_CYCLE(ROOT, PARAMETER_NAME, OBJECT, CLASS, FUNCTION) \ 51 LoadParam Base(ROOT, PARAMETER_NAME, OBJECT, ExecutorObjective<CLASS>(&CLASS::FUNCTION), true)51 LoadParam(ROOT, PARAMETER_NAME, OBJECT, ExecutorObjective<CLASS>(&CLASS::FUNCTION), true) 52 52 53 53 #define LoadParamXML(ROOT, PARAMETER_NAME, OBJECT, CLASS, FUNCTION) \ 54 LoadParam Base(ROOT, PARAMETER_NAME, OBJECT, ExecutorXML<CLASS>(&CLASS::FUNCTION, ROOT, PARAMETER_NAME), false)54 LoadParam(ROOT, PARAMETER_NAME, OBJECT, ExecutorXML<CLASS>(&CLASS::FUNCTION, ROOT, PARAMETER_NAME), false) 55 55 56 56 #define LoadParamXML_CYCLE(ROOT, PARAMETER_NAME, OBJECT, CLASS, FUNCTION) \ 57 LoadParam Base(ROOT, PARAMETER_NAME, OBJECT, ExecutorXML<CLASS>(&CLASS::FUNCTION, ROOT, PARAMETER_NAME), true)57 LoadParam(ROOT, PARAMETER_NAME, OBJECT, ExecutorXML<CLASS>(&CLASS::FUNCTION, ROOT, PARAMETER_NAME), true) 58 58 59 59 … … 81 81 } 82 82 83 84 85 86 83 /************************** 87 84 **** REAL DECLARATIONS **** 88 85 **************************/ 89 86 //! abstract Base class for a Loadable parameter 90 class LoadParam Base: public BaseObject87 class LoadParam : public BaseObject 91 88 { 92 89 public: 93 LoadParam Base(const TiXmlElement* root, const char* paramName, BaseObject* object, const Executor& executor, bool inLoadCycle = false);94 ~LoadParam Base();90 LoadParam(const TiXmlElement* root, const char* paramName, BaseObject* object, const Executor& executor, bool inLoadCycle = false); 91 ~LoadParam(); 95 92 96 LoadParam Base* describe(const char* descriptionText);97 LoadParam Base* defaultValues(unsigned int count, ...);93 LoadParam* describe(const char* descriptionText); 94 LoadParam* defaultValues(unsigned int count, ...); 98 95 99 protected:100 LoadParamBase(const TiXmlElement* root, BaseObject* object, const char* paramName, int paramCount, bool multi, const void* pointerToParam, ...);101 96 102 pr otected:97 private: 103 98 bool inLoadCycle; 104 99 Executor* executor; … … 114 109 }; 115 110 116 117 118 /*****************************************119 **** MACROS DEFINITIONS OF LOADABLES *****120 *****************************************/121 // 0. TYPES122 /**123 * a Macro to easily implement many different Constructors for the LoadParam-Class with no argument124 */125 #define LoadParam0() \126 LoadParam(const TiXmlElement* root, const char* paramName, T* pt2Object, void(T::*function)(), bool multi = false) \127 : LoadParamBase(root, pt2Object, paramName, 0, multi, NULL) \128 { \129 if (loadString != NULL && root != NULL) \130 (*pt2Object.*function)(); \131 else \132 PRINTF(4)("Not loaded parameter %s of %s\n", paramName, pt2Object->getClassName());\133 }134 135 // 1. TYPE136 /**137 * a Macro to easily implement many different Constructors for the LoadParam-Class with 1 argument138 * @param type1 The type of the first functionParameter139 */140 #define LoadParam1(type1) \141 LoadParam(const TiXmlElement* root, const char* paramName, T* pt2Object, void(T::*function)(type1##_TYPE), \142 bool multi = false, type1##_TYPE default1 = type1##_DEFAULT) \143 : LoadParamBase(root, pt2Object, paramName, 1, multi, NULL, type1##_PARAM, default1) \144 { \145 if (loadString != NULL && root != NULL) \146 (*pt2Object.*function)(type1##_FUNC(loadString, default1)); \147 else \148 PRINTF(4)("Not loaded parameter %s of %s\n", paramName, pt2Object->getClassName()); \149 }150 151 // 2. TYPES152 /**153 * a Macro to easily implement many different Constructors for the LoadParam-Class with 2 arguments154 * @param type1 The type of the first functionParameter155 * @param type2 The type of the second functionParameter156 *157 * @TODO DEFAULT VALUES HACK158 */159 #define LoadParam2(type1, type2) \160 LoadParam(const TiXmlElement* root, const char* paramName, T* pt2Object, void(T::*function)(type1##_TYPE, type2##_TYPE), \161 bool multi = false, type1##_TYPE default1 = type1##_DEFAULT, type2##_TYPE default2 = type2##_DEFAULT) \162 : LoadParamBase(root, pt2Object, paramName, 2, multi, NULL, type1##_PARAM, default1, type2##_PARAM, default2) \163 { \164 if (loadString != NULL && root != NULL) \165 { \166 SubString subLoads(loadString); \167 if (subLoads.getCount() >= 1) \168 (*pt2Object.*function)(type1##_FUNC(subLoads.getString(0), default1), type2##_FUNC(subLoads.getString(1), default2)); \169 else \170 PRINTF(2)("Not loaded Parameter %s of %s, because wrong count of arguments.\n -> Should have %d but have %d\n", \171 paramName, pt2Object->getClassName(), 2, subLoads.getCount()); \172 } \173 else \174 PRINTF(4)("Not loaded parameter %s of %s\n", paramName, pt2Object->getClassName()); \175 }176 177 178 // 3. TYPES179 /**180 * a Macro to easily implement many different Constructors for the LoadParam-Class with 3 arguments181 * @param type1 The type of the first functionParameter182 * @param type2 The type of the second functionParameter183 * @param type3 The type of the third functionParameter184 */185 #define LoadParam3(type1, type2, type3) \186 LoadParam(const TiXmlElement* root, const char* paramName, T* pt2Object, void(T::*function)(type1##_TYPE, type2##_TYPE, type3##_TYPE), \187 bool multi = false, type1##_TYPE default1 = type1##_DEFAULT, type2##_TYPE default2 = type2##_DEFAULT, type3##_TYPE default3 = type3##_DEFAULT)\188 : LoadParamBase(root, pt2Object, paramName, 3, multi, NULL, type1##_PARAM, default1, type2##_PARAM, default2, type3##_PARAM, default3) \189 { \190 if (loadString != NULL && root != NULL) \191 { \192 SubString subLoads(loadString); \193 if (subLoads.getCount() == 3) \194 (*pt2Object.*function)(type1##_FUNC(subLoads.getString(0), default1), type2##_FUNC(subLoads.getString(1), default2), type3##_FUNC(subLoads.getString(2), default3)); \195 else \196 PRINTF(2)("Not loaded Parameter %s of %s, because wrong count of arguments.\n -> Should have %d but have %d\n", \197 paramName, pt2Object->getClassName(), 3, subLoads.getCount()); \198 } \199 else \200 PRINTF(4)("Not loaded parameter %s of %s\n", paramName, pt2Object->getClassName()); \201 }202 203 204 // 4. TYPES205 /**206 * a Macro to easily implement many different Constructors for the LoadParam-Class with 4 arguments207 * @param type1 The type of the first functionParameter208 * @param type2 The type of the second functionParameter209 * @param type3 The type of the third functionParameter210 * @param type4 The type of the forth functionParameter211 */212 #define LoadParam4(type1, type2, type3, type4) \213 LoadParam(const TiXmlElement* root, const char* paramName, T* pt2Object, void(T::*function)(type1##_TYPE, type2##_TYPE, type3##_TYPE, type4##_TYPE), \214 bool multi = false, type1##_TYPE default1 = type1##_DEFAULT, type2##_TYPE default2 = type2##_DEFAULT, type3##_TYPE default3 = type3##_DEFAULT, \215 type4##_TYPE default4 = type4##_DEFAULT) \216 : LoadParamBase(root, pt2Object, paramName, 4, multi, NULL, type1##_PARAM, default1, type2##_PARAM, default2, type3##_PARAM, default3, \217 type4##_PARAM, default4) \218 { \219 if (loadString != NULL && root != NULL) \220 { \221 SubString subLoads(loadString); \222 if (subLoads.getCount() == 4) \223 (*pt2Object.*function)(type1##_FUNC(subLoads.getString(0), default1), type2##_FUNC(subLoads.getString(1), default2), type3##_FUNC(subLoads.getString(2), default3), type4##_FUNC(subLoads.getString(3), default4)); \224 else \225 PRINTF(2)("Not loaded Parameter %s of %s, because wrong count of arguments.\n -> Should have %d but have %d\n", \226 paramName, pt2Object->getClassName(), 4, subLoads.getCount()); \227 } \228 else \229 PRINTF(4)("Not loaded parameter %s of %s\n", paramName, pt2Object->getClassName()); \230 }231 232 233 // 5. TYPES234 /**235 * a Macro to easily implement many different Constructors for the LoadParam-Class with 5 arguments236 * @param type1 The type of the first functionParameter237 * @param type2 The type of the second functionParameter238 * @param type3 The type of the third functionParameter239 * @param type4 The type of the forth functionParameter240 * @param type5 The type of the fifth functionParameter241 */242 #define LoadParam5(type1, type2, type3, type4, type5) \243 LoadParam(const TiXmlElement* root, const char* paramName, T* pt2Object, \244 void(T::*function)(type1##_TYPE, type2##_TYPE, type3##_TYPE, type4##_TYPE, type5##_TYPE), \245 bool multi = false, type1##_TYPE default1 = type1##_DEFAULT, type2##_TYPE default2 = type2##_DEFAULT, type3##_TYPE default3 = type3##_DEFAULT, \246 type4##_TYPE default4 = type4##_DEFAULT, type5##_TYPE default5 = type5##_DEFAULT ) \247 : LoadParamBase(root, pt2Object, paramName, 5, multi, NULL, type1##_PARAM, default1, type2##_PARAM, default2, type3##_PARAM, default3, \248 type4##_PARAM, default4, type5##_PARAM, default5) \249 { \250 if (loadString != NULL && root != NULL) \251 { \252 SubString subLoads(loadString); \253 if (subLoads.getCount() == 5) \254 (*pt2Object.*function)(type1##_FUNC(subLoads.getString(0), default1), type2##_FUNC(subLoads.getString(1), default2), type3##_FUNC(subLoads.getString(2), default3), type4##_FUNC(subLoads.getString(3), default4), type5##_FUNC(subLoads.getString(4), default5)); \255 else \256 PRINTF(2)("Not loaded Parameter %s of %s, because wrong count of arguments.\n -> Should have %d but have %d\n", \257 paramName, pt2Object->getClassName(), 5, subLoads.getCount()); \258 } \259 else \260 PRINTF(4)("Not loaded parameter %s of %s\n", paramName, pt2Object->getClassName()); \261 }262 263 // Pointer TYPE264 /**265 * a Macro to easily implement many different Constructors for the LoadParam-Class with one Pointer argument266 * @param type1 The type of the Pointer267 */268 #define LoadParamPT(type1) \269 LoadParam(const TiXmlElement* root, const char* paramName, T* pt2Object, void(T::*function)(type1##_TYPE), type1##_TYPE pointerToParam, bool multi = false) \270 : LoadParamBase(root, pt2Object, paramName, 1, multi, pointerToParam, type1##_PARAM) \271 { \272 if (pointerToParam != NULL && root != NULL) \273 (*pt2Object.*function)((type1##_TYPE) pointerToParam); \274 else \275 PRINTF(4)("Not loaded parameter %s of %s\n", paramName, pt2Object->getClassName()); \276 }277 278 //! derived template class, so all the Classes can load something.279 template<class T> class LoadParam : public LoadParamBase280 {281 public:282 283 #define FUNCTOR_LIST(x) LoadParam ## x284 #include "functor_list.h"285 #undef FUNCTOR_LIST286 };287 288 111 // helper function 289 112
Note: See TracChangeset
for help on using the changeset viewer.