Changeset 2361 for code/branches/objecthierarchy2/src/core
- Timestamp:
- Dec 9, 2008, 2:07:24 AM (16 years ago)
- Location:
- code/branches/objecthierarchy2/src/core
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/objecthierarchy2/src/core/Core.cc
r2344 r2361 56 56 RegisterRootObject(Core); 57 57 58 assert(singletonRef_s == 0); 59 singletonRef_s = this; 58 assert(this->singletonRef_s == 0); 59 this->singletonRef_s = this; 60 this->bInitializeRandomNumberGenerator_ = false; 60 61 61 62 this->setConfigValues(); … … 80 81 SetConfigValue(softDebugLevelShell_, 1).description("The maximal level of debug output shown in the ingame shell").callback(this, &Core::debugLevelChanged); 81 82 SetConfigValue(language_, Language::getLanguage().defaultLanguage_).description("The language of the ingame text").callback(this, &Core::languageChanged); 83 SetConfigValue(bInitializeRandomNumberGenerator_, true).description("If true, all random actions are different each time you start the game").callback(this, &Core::initializeRandomNumberGenerator); 82 84 } 83 85 … … 174 176 ResetConfigValue(language_); 175 177 } 178 179 void Core::initializeRandomNumberGenerator() 180 { 181 static bool bInitialized = false; 182 if (!bInitialized && this->bInitializeRandomNumberGenerator_) 183 { 184 srand(time(0)); 185 rand(); 186 bInitialized = true; 187 } 188 } 176 189 } -
code/branches/objecthierarchy2/src/core/Core.h
r2344 r2361 78 78 Core(const Core&); 79 79 void resetLanguageIntern(); 80 void initializeRandomNumberGenerator(); 80 81 81 82 int softDebugLevel_; //!< The debug level … … 84 85 int softDebugLevelShell_; //!< The debug level for the ingame shell 85 86 std::string language_; //!< The language 87 bool bInitializeRandomNumberGenerator_; //!< If true, srand(time(0)) is called 86 88 87 89 static bool bShowsGraphics_s; //!< global variable that tells whether to show graphics -
code/branches/objecthierarchy2/src/core/Super.h
r2257 r2361 99 99 \ 100 100 static void apply(void* temp) {} \ 101 \ 101 102 static void apply(baseclass* temp) \ 102 103 { \ … … 104 105 for (std::set<const Identifier*>::iterator it = identifier->getDirectChildrenIntern().begin(); it != identifier->getDirectChildrenIntern().end(); ++it) \ 105 106 { \ 107 if (((ClassIdentifier<T>*)(*it))->bSuperFunctionCaller_##functionname##_isFallback_ && ((ClassIdentifier<T>*)(*it))->superFunctionCaller_##functionname##_) \ 108 { \ 109 delete ((ClassIdentifier<T>*)(*it))->superFunctionCaller_##functionname##_; \ 110 ((ClassIdentifier<T>*)(*it))->superFunctionCaller_##functionname##_ = 0; \ 111 ((ClassIdentifier<T>*)(*it))->bSuperFunctionCaller_##functionname##_isFallback_ = false; \ 112 } \ 113 \ 106 114 if (!((ClassIdentifier<T>*)(*it))->superFunctionCaller_##functionname##_) \ 107 115 { \ … … 163 171 for (std::set<const Identifier*>::iterator it = identifier->getDirectChildrenIntern().begin(); it != identifier->getDirectChildrenIntern().end(); ++it) 164 172 { 173 // Check if the caller is a fallback-caller 174 if (((ClassIdentifier<T>*)(*it))->bSuperFunctionCaller_##functionname##_isFallback_ && ((ClassIdentifier<T>*)(*it))->superFunctionCaller_##functionname##_) 175 { 176 // Delete the fallback caller an prepare to get a real caller 177 delete ((ClassIdentifier<T>*)(*it))->superFunctionCaller_##functionname##_; 178 ((ClassIdentifier<T>*)(*it))->superFunctionCaller_##functionname##_ = 0; 179 ((ClassIdentifier<T>*)(*it))->bSuperFunctionCaller_##functionname##_isFallback_ = false; 180 } 181 165 182 // Check if there's not already a caller 166 183 if (!((ClassIdentifier<T>*)(*it))->superFunctionCaller_##functionname##_) … … 183 200 struct SuperFunctionCondition<functionnumber, baseclass, 0, templatehack2> \ 184 201 { \ 185 // The check function just behaves like the fallback - it advances to the check for the next super-function (functionnumber + 1)202 // The check function acts like the fallback - it advances to the check for the next super-function (functionnumber + 1) 186 203 static void check() \ 187 204 { \ … … 301 318 }; \ 302 319 \ 320 class _CoreExport SuperFunctionCaller_##functionname \ 321 { \ 322 public: \ 323 virtual void operator()( SUPER_CALL_ARGUMENTS##hasarguments(__VA_ARGS__) ) = 0; \ 324 virtual ~SuperFunctionCaller_##functionname () {} \ 325 }; \ 326 \ 327 template <class T> \ 328 class SuperFunctionClassCaller_purevirtualfallback_##functionname : public SuperFunctionCaller_##functionname \ 329 { \ 330 public: \ 331 inline void operator()( SUPER_CALL_ARGUMENTS##hasarguments(__VA_ARGS__) ) \ 332 { \ 333 } \ 334 }; \ 335 \ 303 336 template <class T> \ 304 337 struct SuperFunctionInitialization<functionnumber, T> \ … … 306 339 static void initialize(ClassIdentifier<T>* identifier) \ 307 340 { \ 308 identifier->superFunctionCaller_##functionname##_ = 0; \ 341 identifier->superFunctionCaller_##functionname##_ = new SuperFunctionClassCaller_purevirtualfallback_##functionname <T>; \ 342 identifier->bSuperFunctionCaller_##functionname##_isFallback_ = true; \ 309 343 SuperFunctionInitialization<functionnumber + 1, T>::initialize(identifier); \ 310 344 } \ … … 322 356 }; \ 323 357 \ 324 class _CoreExport SuperFunctionCaller_##functionname \325 { \326 public: \327 virtual void operator()( SUPER_CALL_ARGUMENTS##hasarguments(__VA_ARGS__) ) = 0; \328 virtual ~SuperFunctionCaller_##functionname () {} \329 }; \330 \331 358 template <class T> \ 332 359 class SuperFunctionClassCaller_##functionname : public SuperFunctionCaller_##functionname \ … … 375 402 }; 376 403 377 // Initializes the SuperFunctionCaller-pointer with zero. 404 // Baseclass of the super-function caller. The real call will be done by a 405 // templatized subclass through the virtual () operator. 406 class _CoreExport SuperFunctionCaller_##functionname 407 { 408 public: 409 virtual void operator()( SUPER_CALL_ARGUMENTS##hasarguments(__VA_ARGS__) ) = 0; 410 virtual ~SuperFunctionCaller_##functionname () {} 411 }; 412 413 // Fallback if the base is pure virtual 414 template <class T> 415 class SuperFunctionClassCaller_purevirtualfallback_##functionname : public SuperFunctionCaller_##functionname 416 { 417 public: 418 // Fallback does nothing 419 inline void operator()( SUPER_CALL_ARGUMENTS##hasarguments(__VA_ARGS__) ) 420 { 421 } 422 }; 423 424 // Initializes the SuperFunctionCaller-pointer with a fallback caller in case the base function is pure virtual 378 425 template <class T> 379 426 struct SuperFunctionInitialization<functionnumber, T> … … 381 428 static void initialize(ClassIdentifier<T>* identifier) 382 429 { 383 identifier->superFunctionCaller_##functionname##_ = 0; 430 identifier->superFunctionCaller_##functionname##_ = new SuperFunctionClassCaller_purevirtualfallback_##functionname <T>; 431 identifier->bSuperFunctionCaller_##functionname##_isFallback_ = true; 384 432 385 433 // Calls the initialization of the next super-function (functionnumber + 1) … … 400 448 SuperFunctionDestruction<functionnumber + 1, T>::destroy(identifier); 401 449 } 402 };403 404 // Baseclass of the super-function caller. The real call will be done by a405 // templatized subclass through the virtual () operator.406 class _CoreExport SuperFunctionCaller_##functionname407 {408 public:409 virtual void operator()( SUPER_CALL_ARGUMENTS##hasarguments(__VA_ARGS__) ) = 0;410 virtual ~SuperFunctionCaller_##functionname () {}411 450 }; 412 451 … … 497 536 #ifndef SUPER_INTRUSIVE_DECLARATION 498 537 #define SUPER_INTRUSIVE_DECLARATION(functionname) \ 499 SuperFunctionCaller_##functionname * superFunctionCaller_##functionname##_ 538 SuperFunctionCaller_##functionname * superFunctionCaller_##functionname##_; \ 539 bool bSuperFunctionCaller_##functionname##_isFallback_ 500 540 #endif 501 541
Note: See TracChangeset
for help on using the changeset viewer.