Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 7714 in orxonox.OLD for trunk/src/orxonox.cc


Ignore:
Timestamp:
May 19, 2006, 1:29:27 AM (19 years ago)
Author:
bensch
Message:

orxonox/trunk: Reimplementation of the Executor started in orxonox.cc

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/orxonox.cc

    r7711 r7714  
    302302    NetworkManager::getInstance()->establishConnection(this->serverName, port);
    303303  }
    304   else if( this->port > 0) {    // we are a server
     304  else if( this->port > 0)
     305  {    // we are a server
    305306    State::setOnline(true);
    306307    NetworkManager::getInstance()->createServer(port);
     
    335336    PRINTF(1)("The DataDirectory %s could not be verified\n\nh" \
    336337              "!!!  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(),
    339340              CONFIG_SECTION_GENERAL,
    340341              CONFIG_NAME_DATADIR );
     
    413414bool showGui = false;
    414415
    415 
     416/// HACK HACK TEST
     417
     418
     419template<typename type> MT_Type ExecutorParamType() { return MT_EXT1; };
     420template<> MT_Type ExecutorParamType<bool>() { return MT_EXT1; };
     421template<> MT_Type ExecutorParamType<int>() { return MT_INT; };
     422template<> MT_Type ExecutorParamType<unsigned int>() { return MT_UINT; };
     423template<> MT_Type ExecutorParamType<float>() { return MT_FLOAT; };
     424template<> MT_Type ExecutorParamType<char>() { return MT_CHAR; };
     425template<> MT_Type ExecutorParamType<const std::string&>() { return MT_STRING; };
     426
     427template<typename type> type fromString(const std::string& input, type defaultValue) {return defaultValue; };
     428template<> bool fromString<bool>(const std::string& input, bool defaultValue) { return isBool(input, defaultValue); };
     429template<> int fromString<int>(const std::string& input, int defaultValue) { return isInt(input, defaultValue); };
     430template<> unsigned int fromString<unsigned int>(const std::string& input, unsigned int defaultValue) { return isInt(input, defaultValue); };
     431template<> float fromString<float>(const std::string& input, float defaultValue) { return isFloat(input, defaultValue); };
     432template<> char fromString<char>(const std::string& input, char defaultValue) { return isInt(input, defaultValue); };
     433template<> const std::string& fromString<const std::string&>(const std::string& input, const std::string& defaultValue) { return isString(input, defaultValue); };
     434
     435template<typename type> type getDefault(const MultiType* const defaultValues, unsigned int i) { return (type)0; };
     436template<> bool getDefault<bool>(const MultiType* const defaultValues, unsigned int i) { return defaultValues[i].getBool(); };
     437template<> int getDefault<int>(const MultiType* const defaultValues, unsigned int i) { return defaultValues[i].getInt(); };
     438template<> unsigned int getDefault<unsigned int>(const MultiType* const defaultValues, unsigned int i) { return defaultValues[i].getInt(); };
     439template<> float getDefault<float>(const MultiType* const defaultValues, unsigned int i) { return defaultValues[i].getFloat(); };
     440template<> char getDefault<char>(const MultiType* const defaultValues, unsigned int i) { return defaultValues[i].getChar(); };
     441template<> std::string getDefault<std::string>(const MultiType* const defaultValues, unsigned int i) { return defaultValues[i].getString(); };
     442
     443
     444template<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
     465template<class T, typename type0> class Executor1Params : public Executor
     466{
     467private:
     468  void (T::*functionPointer)(type0);
     469
     470public:
     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
     492template<class T, typename type0, typename type1> class Executor2Params : public Executor
     493{
     494private:
     495  void (T::*functionPointer)(type0, type1);
     496
     497public:
     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
     514class TestClass : public BaseObject
     515{
     516public:
     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
     525void 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
    416537
    417538/**********************************
     
    426547int main(int argc, char** argv)
    427548{
     549  TEST();
    428550  CmdLinePrefsReader prefs;
    429551
     
    444566  }
    445567  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 );
    447570
    448571  }
     
    506629  // checking for existence of the configuration-files, or if the lock file is still used
    507630  if (showGui || (!File("./orxonox.conf").isFile() &&
    508       !File(DEFAULT_CONFIG_FILE).isFile())
     631                  !File(DEFAULT_CONFIG_FILE).isFile())
    509632#if DEBUG < 3 // developers do not need to see the GUI, when orxonox fails
    510633      || ResourceManager::isFile(DEFAULT_LOCK_FILE)
Note: See TracChangeset for help on using the changeset viewer.