- Timestamp:
- May 19, 2006, 1:29:27 AM (19 years ago)
- Location:
- trunk/src
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/lib/util/executor/executor.cc
r7300 r7714 18 18 #include "executor.h" 19 19 20 #include "debug.h"21 #include "class_list.h"22 23 #include "key_names.h"24 #include <stdarg.h>25 #include <stdio.h>26 #include <string.h>27 28 using namespace std;29 30 20 //////////////////////// 31 21 // SHELL COMMAND BASE // 32 22 //////////////////////// 33 23 /** 34 * constructs and registers a new Command24 * @brief constructs and registers a new Command 35 25 * @param commandName the name of the Command 36 26 * @param className the name of the class to apply this command to … … 43 33 const MultiType& param4) 44 34 { 45 this->setClassID(CL_EXECUTOR, "Executor");35 // this->setClassID(CL_EXECUTOR, "Executor"); 46 36 47 37 // What Parameters have we got -
trunk/src/lib/util/executor/executor.h
r7474 r7714 36 36 * Functions with many types (@see functor_list.h) 37 37 */ 38 class Executor : public BaseObject38 class Executor : public BaseObject 39 39 { 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 40 public: 41 virtual ~Executor(); 42 43 virtual Executor* clone () const = 0; 44 45 // SETTING up the EXECUTOR 46 Executor* defaultValues(const MultiType& value0 = MT_NULL, const MultiType& value1 = MT_NULL, 47 const MultiType& value2 = MT_NULL, const MultiType& value3 = MT_NULL, 48 const MultiType& value4 = MT_NULL); 49 /** @param i the i'th defaultValue, @returns reference to the MultiType */ 50 inline MultiType& getDefaultValue(unsigned int i) { return defaultValue[i]; }; 51 52 // EXECUTE 53 /** executes a Command @param object the object to apply this to @param parameters the parameters the command takes */ 54 virtual void operator()(BaseObject* object, const SubString& sub = SubString()) const = 0; 55 /** executes a Command @param object the object to apply this to @param parameters the parameters the command takes @brief here for your convenience*/ 56 void execute (BaseObject* object, const std::string& parameters = "") const { (*this)(object, parameters); }; 57 58 // RETRIEVE INFORMATION 59 /** @returns the Type of this Function (either static or objective) */ 60 inline long getType() const { return this->functorType; }; 61 /** @returns the Count of Parameters this Executor takes */ 62 inline unsigned int getParamCount() const { return this->paramCount; }; 63 64 static void debug(); 65 66 protected: 67 Executor(const MultiType& param0 = MT_NULL, const MultiType& param1 = MT_NULL, 68 const MultiType& param2 = MT_NULL, const MultiType& param3 = MT_NULL, 69 const MultiType& param4 = MT_NULL); 70 71 void cloning(Executor* executor) const; 72 73 protected: 74 short functorType; //!< The type of Function we've got (either static or objective). 75 unsigned int paramCount; //!< the count of parameters. 76 MultiType defaultValue[5]; //!< Default Values. 77 77 }; 78 78 … … 89 89 90 90 91 91 92 /////////////////////// 92 93 // FUNCTION POINTERS // … … 232 233 template<class T> class EXECUTOR : public Executor 233 234 { 234 235 236 237 238 239 240 241 242 243 244 245 //! FUNCTOR_LIST is the List of CommandConstructors235 public: 236 EXECUTOR() : Executor() { }; 237 // COPY constuctor (virtual version) 238 virtual Executor* clone () const 239 { 240 EXECUTOR<T>* executor = new EXECUTOR<T>(); 241 this->cloning(executor); 242 executor->fp = this->fp; 243 return executor; 244 } 245 246 //! FUNCTOR_LIST is the List of CommandConstructors 246 247 #define FUNCTOR_LIST(x) ExecutorConstructor ## x 247 248 #include "functor_list.h" 248 249 #undef FUNCTOR_LIST 249 250 250 251 //! FUNCTOR_LIST is the List of FunctionPointers252 251 private: 252 //! FUNCTOR_LIST is the List of FunctionPointers 253 union FunctionPointers { 253 254 #define FUNCTOR_LIST(x) ExecutorFunctionPoiter ## x 254 255 #include "functor_list.h" 255 256 #undef FUNCTOR_LIST 256 257 258 259 260 //! FUNCTOR_LIST is the List of Executive Functions257 } fp; 258 259 virtual void operator()(BaseObject* object, const SubString& sub = SubString()) const 260 { 261 //! FUNCTOR_LIST is the List of Executive Functions 261 262 #define FUNCTOR_LIST(x) ExecutorExecute ## x 262 263 #include "functor_list.h" 263 264 #undef FUNCTOR_LIST 264 } 265 266 } 265 267 }; 266 268 … … 292 294 template<class T> class ExecutorStatic : public Executor 293 295 { 294 295 296 297 298 299 300 301 302 303 304 305 //! FUNCTOR_LIST is the List of CommandConstructors296 public: 297 EXECUTOR() : Executor() { }; 298 // COPY constuctor 299 virtual Executor* clone () const 300 { 301 EXECUTOR<T>* executor = new EXECUTOR<T>(); 302 this->cloning(executor); 303 executor->fp = this->fp; 304 return executor; 305 } 306 307 //! FUNCTOR_LIST is the List of CommandConstructors 306 308 #define FUNCTOR_LIST(x) ExecutorConstructor ## x 307 309 #include "functor_list.h" 308 310 #undef FUNCTOR_LIST 309 311 310 311 //! FUNCTOR_LIST is the List of FunctionPointers312 312 private: 313 //! FUNCTOR_LIST is the List of FunctionPointers 314 union FunctionPointers { 313 315 #define FUNCTOR_LIST(x) ExecutorFunctionPoiter ## x 314 316 #include "functor_list.h" 315 317 #undef FUNCTOR_LIST 316 317 318 319 320 321 //! FUNCTOR_LIST is the List of Executive Functions318 } fp; 319 320 321 virtual void operator()(BaseObject* object, const SubString& sub = SubString()) const 322 { 323 //! FUNCTOR_LIST is the List of Executive Functions 322 324 #define FUNCTOR_LIST(x) ExecutorExecute ## x 323 325 #include "functor_list.h" 324 326 #undef FUNCTOR_LIST 325 } 327 328 } 326 329 }; 327 330 -
trunk/src/lib/util/helper_functions.cc
r7412 r7714 101 101 * @return returns the contained string (char-array), if STRING was correct otherwise defaultValue 102 102 */ 103 std::stringisString(const std::string& STRING, const std::string& defaultValue)103 const std::string& isString(const std::string& STRING, const std::string& defaultValue) 104 104 { 105 105 if (STRING.size() > 0) … … 124 124 { 125 125 if(::toupper(*it1) != ::toupper(*it2)) //letters differ? 126 // return -1 to indicate smaller than, 1 otherwise126 // return -1 to indicate smaller than, 1 otherwise 127 127 return (::toupper(*it1) < ::toupper(*it2)) ? -1 : 1; 128 128 //proceed to the next character in each string … … 131 131 } 132 132 size_t size1=s1.size(), size2=s2.size();// cache lengths 133 133 //return -1,0 or 1 according to strings' lengths 134 134 if (size1==size2) 135 135 return 0; … … 155 155 { 156 156 if(::toupper(*it1) != ::toupper(*it2)) //letters differ? 157 // return -1 to indicate smaller than, 1 otherwise157 // return -1 to indicate smaller than, 1 otherwise 158 158 return (::toupper(*it1) < ::toupper(*it2)) ? -1 : 1; 159 159 //proceed to the next character in each string -
trunk/src/lib/util/helper_functions.h
r7371 r7714 18 18 float isFloat(const std::string& FLOAT, float defaultValue); 19 19 const char* isCString(const std::string& STRING, const char* defaultValue); 20 std::stringisString(const std::string& STRING, const std::string& defaultValue);20 const std::string& isString(const std::string& STRING, const std::string& defaultValue); 21 21 22 22 -
trunk/src/orxonox.cc
r7711 r7714 302 302 NetworkManager::getInstance()->establishConnection(this->serverName, port); 303 303 } 304 else if( this->port > 0) { // we are a server 304 else if( this->port > 0) 305 { // we are a server 305 306 State::setOnline(true); 306 307 NetworkManager::getInstance()->createServer(port); … … 335 336 PRINTF(1)("The DataDirectory %s could not be verified\n\nh" \ 336 337 "!!! Please Change in File %s Section %s Entry %s to a suitable value !!!\n", 337 ResourceManager::getInstance()->getDataDir().c_str(),338 this->configFileName.c_str(),338 ResourceManager::getInstance()->getDataDir().c_str(), 339 this->configFileName.c_str(), 339 340 CONFIG_SECTION_GENERAL, 340 341 CONFIG_NAME_DATADIR ); … … 413 414 bool showGui = false; 414 415 415 416 /// HACK HACK TEST 417 418 419 template<typename type> MT_Type ExecutorParamType() { return MT_EXT1; }; 420 template<> MT_Type ExecutorParamType<bool>() { return MT_EXT1; }; 421 template<> MT_Type ExecutorParamType<int>() { return MT_INT; }; 422 template<> MT_Type ExecutorParamType<unsigned int>() { return MT_UINT; }; 423 template<> MT_Type ExecutorParamType<float>() { return MT_FLOAT; }; 424 template<> MT_Type ExecutorParamType<char>() { return MT_CHAR; }; 425 template<> MT_Type ExecutorParamType<const std::string&>() { return MT_STRING; }; 426 427 template<typename type> type fromString(const std::string& input, type defaultValue) {return defaultValue; }; 428 template<> bool fromString<bool>(const std::string& input, bool defaultValue) { return isBool(input, defaultValue); }; 429 template<> int fromString<int>(const std::string& input, int defaultValue) { return isInt(input, defaultValue); }; 430 template<> unsigned int fromString<unsigned int>(const std::string& input, unsigned int defaultValue) { return isInt(input, defaultValue); }; 431 template<> float fromString<float>(const std::string& input, float defaultValue) { return isFloat(input, defaultValue); }; 432 template<> char fromString<char>(const std::string& input, char defaultValue) { return isInt(input, defaultValue); }; 433 template<> const std::string& fromString<const std::string&>(const std::string& input, const std::string& defaultValue) { return isString(input, defaultValue); }; 434 435 template<typename type> type getDefault(const MultiType* const defaultValues, unsigned int i) { return (type)0; }; 436 template<> bool getDefault<bool>(const MultiType* const defaultValues, unsigned int i) { return defaultValues[i].getBool(); }; 437 template<> int getDefault<int>(const MultiType* const defaultValues, unsigned int i) { return defaultValues[i].getInt(); }; 438 template<> unsigned int getDefault<unsigned int>(const MultiType* const defaultValues, unsigned int i) { return defaultValues[i].getInt(); }; 439 template<> float getDefault<float>(const MultiType* const defaultValues, unsigned int i) { return defaultValues[i].getFloat(); }; 440 template<> char getDefault<char>(const MultiType* const defaultValues, unsigned int i) { return defaultValues[i].getChar(); }; 441 template<> std::string getDefault<std::string>(const MultiType* const defaultValues, unsigned int i) { return defaultValues[i].getString(); }; 442 443 444 template<class T> class Executor0Params : public Executor 445 { 446 private: 447 void (T::*functionPointer)(); 448 449 public: 450 Executor0Params (void (T::*functionPointer)()) 451 : Executor() 452 { 453 this->functorType = Executor_Objective; 454 this->functionPointer = functionPointer; 455 } 456 virtual void operator()(BaseObject* object, const SubString& sub = SubString()) const 457 { 458 (dynamic_cast<T*>(object)->*functionPointer)(); 459 }; 460 461 Executor* clone() const {}; 462 }; 463 464 465 template<class T, typename type0> class Executor1Params : public Executor 466 { 467 private: 468 void (T::*functionPointer)(type0); 469 470 public: 471 Executor1Params (void (T::*functionPointer)(type0)) 472 : Executor(ExecutorParamType<type0>()) 473 { 474 this->functorType = Executor_Objective; 475 this->functionPointer = functionPointer; 476 } 477 virtual void operator()(BaseObject* object, const SubString& sub = SubString()) const 478 { 479 480 /* // THE VERY COOL DEBUG 481 printf("SUB[0] : %s\n", sub[0].c_str()); 482 printf("getDefault<type0>(this->defaultValue, 0):::: %d\n", getDefault<type0>(this->defaultValue, 0)); 483 printf("VALUE: %d\n", fromString<type0>(sub[0], getDefault<type0>(this->defaultValue, 0))); 484 */ 485 (dynamic_cast<T*>(object)->*functionPointer)( fromString<type0>(sub[0], getDefault<type0>(this->defaultValue, 0)) ); 486 }; 487 488 virtual Executor* clone() const {}; 489 }; 490 491 /// DOUBLE PENETRATION 492 template<class T, typename type0, typename type1> class Executor2Params : public Executor 493 { 494 private: 495 void (T::*functionPointer)(type0, type1); 496 497 public: 498 Executor2Params (void (T::*functionPointer)(type0, type1)) 499 : Executor(ExecutorParamType<type0>(), ExecutorParamType<type1>()) 500 { 501 this->functorType = Executor_Objective; 502 this->functionPointer = functionPointer; 503 } 504 virtual void operator()(BaseObject* object, const SubString& sub = SubString()) const 505 { 506 (dynamic_cast<T*>(object)->*functionPointer)( 507 fromString<type0>(sub[0], getDefault<type0>(this->defaultValue, 0)), 508 fromString<type1>(sub[1], getDefault<type1>(this->defaultValue, 1))); 509 }; 510 511 virtual Executor* clone() const {}; 512 }; 513 514 class TestClass : public BaseObject 515 { 516 public: 517 TestClass() {}; 518 519 void printTest() { printf ("TEST\n"); }; 520 void printTestInt(int i) { printf ("%d\n", i); }; 521 void printTestBool(bool b) { printf("%d\n", (int)b); }; 522 void printTwoVals(bool b, int i) { printf ("%d %d\n", b, i); }; 523 }; 524 525 void TEST() 526 { 527 TestClass test; 528 SubString testStrings("1, 2, 3", ",", SubString::WhiteSpaces, false); 529 (Executor0Params<TestClass>(&TestClass::printTest))(&test, testStrings); 530 (Executor1Params<TestClass,int>(&TestClass::printTestInt))(&test, testStrings); 531 (Executor1Params<TestClass,bool>(&TestClass::printTestBool))(&test, testStrings); 532 (Executor2Params<TestClass,bool, int>(&TestClass::printTwoVals))(&test, testStrings); 533 534 } 535 536 //// HACK HACK 416 537 417 538 /********************************** … … 426 547 int main(int argc, char** argv) 427 548 { 549 TEST(); 428 550 CmdLinePrefsReader prefs; 429 551 … … 444 566 } 445 567 else if ( Preferences::getInstance()->getString("misc", "bt-to-file", "1") == "1" ) 446 { SignalHandler::getInstance()->doCatch( argv[0], GDB_RUN_WRITE_TO_FILE ); 568 { 569 SignalHandler::getInstance()->doCatch( argv[0], GDB_RUN_WRITE_TO_FILE ); 447 570 448 571 } … … 506 629 // checking for existence of the configuration-files, or if the lock file is still used 507 630 if (showGui || (!File("./orxonox.conf").isFile() && 508 !File(DEFAULT_CONFIG_FILE).isFile())631 !File(DEFAULT_CONFIG_FILE).isFile()) 509 632 #if DEBUG < 3 // developers do not need to see the GUI, when orxonox fails 510 633 || ResourceManager::isFile(DEFAULT_LOCK_FILE)
Note: See TracChangeset
for help on using the changeset viewer.