Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 5654 in orxonox.OLD for trunk/src/util


Ignore:
Timestamp:
Nov 20, 2005, 9:12:50 PM (19 years ago)
Author:
bensch
Message:

orxonox/trunk: cycle-loading of LoadParam works…

Location:
trunk/src/util
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/util/loading/load_param.cc

    r5653 r5654  
    1313   co-programmer: ...
    1414*/
     15
     16#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_LOADING
    1517
    1618#include "functor_list.h"
     
    114116 * @param executor the Executor, that executes the loading procedure.
    115117 */
    116 LoadParamBase::LoadParamBase(const TiXmlElement* root, const char* paramName, BaseObject* object, const Executor& executor)
    117 {
    118   this->loadString = grabParameter(root, paramName);
     118LoadParamBase::LoadParamBase(const TiXmlElement* root, const char* paramName, BaseObject* object, const Executor& executor, bool inLoadCycle)
     119{
    119120  this->paramName = paramName;
    120121  this->object = object;
    121   if (root != NULL)
    122   {
    123     this->executor = executor.clone();
    124   }
     122  this->inLoadCycle = inLoadCycle;
     123
     124  // determin the LoadString.
     125  if (likely(!inLoadCycle))
     126    this->loadString = grabParameter(root, paramName);
    125127  else
    126128  {
    127     this->executor = NULL;
     129    if (!strcmp(root->Value(), paramName))
     130    {
     131      const TiXmlNode* val = root->FirstChild();
     132      if( val->ToText())
     133        this->loadString = val->Value();
     134    }
     135    else
     136      this->loadString = NULL;
    128137  }
    129138
     139  // set the Executor.
     140  this->executor = executor.clone();
    130141}
    131142
  • trunk/src/util/loading/load_param.h

    r5653 r5654  
    4646 */
    4747#define LoadParamNEW(ROOT, PARAMETER_NAME, OBJECT, CLASS, FUNCTION) \
    48          LoadParamBase(ROOT, PARAMETER_NAME, OBJECT, ExecutorObjective<CLASS>(&CLASS::FUNCTION))
     48         LoadParamBase(ROOT, PARAMETER_NAME, OBJECT, ExecutorObjective<CLASS>(&CLASS::FUNCTION), false)
     49
     50#define LoadParam_CYCLE(ROOT, PARAMETER_NAME, OBJECT, CLASS, FUNCTION) \
     51         LoadParamBase(ROOT, PARAMETER_NAME, OBJECT, ExecutorObjective<CLASS>(&CLASS::FUNCTION), true)
    4952
    5053#define LoadParamXML(ROOT, PARAMETER_NAME, OBJECT, CLASS, FUNCTION) \
    51          LoadParamBase(ROOT, PARAMETER_NAME, OBJECT, ExecutorXML<CLASS>(&CLASS::FUNCTION, ROOT, PARAMETER_NAME))
     54         LoadParamBase(ROOT, PARAMETER_NAME, OBJECT, ExecutorXML<CLASS>(&CLASS::FUNCTION, ROOT, PARAMETER_NAME), false)
     55
     56#define LoadParamXML_CYCLE(ROOT, PARAMETER_NAME, OBJECT, CLASS, FUNCTION) \
     57         LoadParamBase(ROOT, PARAMETER_NAME, OBJECT, ExecutorXML<CLASS>(&CLASS::FUNCTION, ROOT, PARAMETER_NAME), true)
     58
     59
     60/**
     61 * this Starts a Cycle in the Loading Process
     62 * be aware, that in the cycle the first parameter of load_param should because
     63 * called element, and that you must say true at the Fith parameter, or it will fail
     64 * also you will have to close the Cycle again with LOAD_PARAM_END_CYCLE
     65 *
     66 * @param ROOT The root XLM-element to search element under.
     67 * @param ELEMENT the element to search
     68 */
     69#define LOAD_PARAM_START_CYCLE(ROOT, ELEMENT) \
     70  const TiXmlElement* ELEMENT; \
     71  ELEMENT= ROOT->FirstChildElement(); \
     72  while( ELEMENT != NULL) \
     73{
     74/**
     75   * closes a LoadParam Loop
     76   * @see LOAD_PARAM_START_CYCLE
     77   * @param ELEMENT the Element to step through.
     78 */
     79#define LOAD_PARAM_END_CYCLE(ELEMENT) \
     80  ELEMENT = ELEMENT->NextSiblingElement(); \
     81}
     82
     83
    5284
    5385
     
    5991{
    6092  public:
    61     LoadParamBase(const TiXmlElement* root, const char* paramName, BaseObject* object, const Executor& exeutor);
     93    LoadParamBase(const TiXmlElement* root, const char* paramName, BaseObject* object, const Executor& executor, bool inLoadCycle = false);
    6294    ~LoadParamBase();
    6395
     
    69101
    70102  protected:
    71     bool                     withLoadString;       //!< If we need the loadString to execute this.
     103    bool                     inLoadCycle;
    72104    Executor*                executor;
    73105    BaseObject*              object;
     
    82114};
    83115
    84 
    85 //! macro that makes it even more easy to load a Parameter
    86 /**
    87  * @param className the name of the class to load
    88  * @param parameterName the name of the parameter to load as written in the XML-file
    89  * @param function the function to call
    90  */
    91 #define LOAD_PARAM(className, parameterName, paramFunction) \
    92         LoadParam<className>(root, #parameterName, this, &className::paramFunction)
    93 
    94 /**
    95  * this Starts a Cycle in the Loading Process
    96  * be aware, that in the cycle the first parameter of load_param should because
    97  * called element, and that you must say true at the Fith parameter, or it will fail
    98  * also you will have to close the Cycle again with LOAD_PARAM_END_CYCLE
    99  *
    100  * @param ROOT The root XLM-element to search element under.
    101  * @param ELEMENT the element to search
    102  */
    103 #define LOAD_PARAM_START_CYCLE(ROOT, ELEMENT) \
    104   const TiXmlElement* ELEMENT; \
    105   ELEMENT= ROOT->FirstChildElement(); \
    106   while( ELEMENT != NULL) \
    107   {
    108 /**
    109  * closes a LoadParam Loop
    110  * @see LOAD_PARAM_START_CYCLE
    111  * @param ELEMENT the Element to step through.
    112  */
    113 #define LOAD_PARAM_END_CYCLE(ELEMENT) \
    114   ELEMENT = ELEMENT->NextSiblingElement(); \
    115   }
    116116
    117117
  • trunk/src/util/track/track_manager.cc

    r5644 r5654  
    398398  double x, y, z, d;
    399399
    400   LOAD_PARAM_START_CYCLE(root, element)
    401 
    402       LoadParam<TrackManager>(element, "WorkOn", this, &TrackManager::workOnS, true)
     400  LOAD_PARAM_START_CYCLE(root, element);
     401  {
     402
     403    LoadParam_CYCLE(element, "WorkOn", this, TrackManager, workOnS)
    403404        .describe("Selects a TrackElement (by name) to work on");
    404405
    405       LoadParam<TrackManager>(element, "Point", this, &TrackManager::addPoint, true)
     406    LoadParam_CYCLE(element, "Point", this, TrackManager, addPoint)
    406407        .describe("Adds a new Point to the currently selected TrackElement");
    407408
    408       LoadParam<TrackManager>(element, "Duration", this, &TrackManager::setDuration, true)
     409    LoadParam_CYCLE(element, "Duration", this, TrackManager, setDuration)
    409410        .describe("Sets the Duration of the currently selected TrackElement");
    410411
    411       LoadParam<TrackManager>(element, "HotPoint", this, &TrackManager::addHotPoint, true)
     412    LoadParam_CYCLE(element, "HotPoint", this, TrackManager, addHotPoint)
    412413        .describe("Sets a new Point that acts as a hot point. meaning, the curve will flow through this Point");
    413414
    414       LoadParam<TrackManager>(element, "SavePoint", this, &TrackManager::setSavePointS, true)
     415    LoadParam_CYCLE(element, "SavePoint", this, TrackManager, setSavePointS)
    415416        .describe("Sets the current selected Point to a Savepoint, meaning that the curve will be ended and a new one starts, and that one starts again from this point on");
    416417
    417       LoadParam<TrackManager>(element, "Fork", this, &TrackManager::forkS, true)
     418    LoadParam_CYCLE(element, "Fork", this, TrackManager, forkS)
    418419        .describe("Forks the Path into multiple forked Path names seperated by ','");
    419420
    420       LoadParam<TrackManager>(element, "Join", this, &TrackManager::joinS, true)
     421    LoadParam_CYCLE(element, "Join", this, TrackManager, joinS)
    421422        .describe("Joins multiple joining Path names seperated by ','");
    422423
    423424      /*
    424         if( !strcmp( element->Value(), "Fork"))
    425         {
    426         container = element->FirstChild();
    427         if( container->ToText())
     425    if( !strcmp( element->Value(), "Fork"))
     426    {
     427    container = element->FirstChild();
     428    if( container->ToText())
    428429        {
    429430        assert( container->Value() != NULL);
     
    445446        }
    446447      */
    447       LOAD_PARAM_END_CYCLE(element);
     448  }
     449  LOAD_PARAM_END_CYCLE(element);
    448450}
    449451
Note: See TracChangeset for help on using the changeset viewer.