Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/trunk/src/util/loading/load_param.h @ 7130

Last change on this file since 7130 was 7130, checked in by bensch, 18 years ago

orxonox/trunk: removed some std::list

File size: 4.1 KB
Line 
1/*
2   orxonox - the future of 3D-vertical-scrollers
3
4   Copyright (C) 2004 orx
5
6   This program is free software; you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation; either version 2, or (at your option)
9   any later version.
10
11   ### File Specific:
12   main-programmer: Benjamin Grauer
13   co-programmer: ...
14*/
15
16/*!
17 * @file load_param.h
18 * A Class and macro-functions, that makes our lives easy to load-in parameters
19 */
20
21#ifndef _LOAD_PARAM_H
22#define _LOAD_PARAM_H
23
24#include "base_object.h"
25
26#include "executor/executor.h"
27#include "executor/executor_specials.h"
28
29#include "helper_functions.h"
30
31// Forward Declaration //
32class LoadClassDescription;
33class LoadParamDescription;
34class MultiType;
35
36
37/**
38 * Loads a Parameter from ROOT named PARAMETER_NAME
39 * onto OBJECT of CLASS, trough the FUNCTION
40 * @param ROOT the TiXmlElement to load the Parameter from
41 * @param PARAMETER_NAME the Name of the Parameter to load
42 * @param OBJECT The BaseObject to load the new setting to.
43 * @param CLASS What Class the BaseObejct is of (this is for identifying the Functuon)
44 * @param FUNCTION The function of Class to Load (if you want to call &CLASS::FUNCTION write FUNCTION here).
45 */
46#define LoadParam(ROOT, PARAMETER_NAME, OBJECT, CLASS, FUNCTION) \
47         CLoadParam(ROOT, PARAMETER_NAME, OBJECT, ExecutorObjective<CLASS>(&CLASS::FUNCTION), false)
48
49#define LoadParam_CYCLE(ROOT, PARAMETER_NAME, OBJECT, CLASS, FUNCTION) \
50         CLoadParam(ROOT, PARAMETER_NAME, OBJECT, ExecutorObjective<CLASS>(&CLASS::FUNCTION), true)
51
52#define LoadParamXML(ROOT, PARAMETER_NAME, OBJECT, CLASS, FUNCTION) \
53         CLoadParam(ROOT, PARAMETER_NAME, OBJECT, ExecutorXML<CLASS>(&CLASS::FUNCTION, ROOT, PARAMETER_NAME), false)
54
55#define LoadParamXML_CYCLE(ROOT, PARAMETER_NAME, OBJECT, CLASS, FUNCTION) \
56         CLoadParam(ROOT, PARAMETER_NAME, OBJECT, ExecutorXML<CLASS>(&CLASS::FUNCTION, ROOT, PARAMETER_NAME), true)
57
58
59/**
60 * this Starts a Cycle in the Loading Process
61 * be aware, that in the cycle the first parameter of load_param should because
62 * called element, and that you must say true at the Fith parameter, or it will fail
63 * also you will have to close the Cycle again with LOAD_PARAM_END_CYCLE
64 *
65 * @param ROOT The root XLM-element to search element under.
66 * @param ELEMENT the element to search
67 */
68#define LOAD_PARAM_START_CYCLE(ROOT, ELEMENT) \
69  const TiXmlElement* ELEMENT; \
70  ELEMENT= ROOT->FirstChildElement(); \
71  while( ELEMENT != NULL) \
72{
73/**
74   * closes a LoadParam Loop
75   * @see LOAD_PARAM_START_CYCLE
76   * @param ELEMENT the Element to step through.
77 */
78#define LOAD_PARAM_END_CYCLE(ELEMENT) \
79  ELEMENT = ELEMENT->NextSiblingElement(); \
80}
81
82/**************************
83**** REAL DECLARATIONS ****
84**************************/
85//! abstract Base class for a Loadable parameter
86class CLoadParam : public BaseObject
87{
88  public:
89    CLoadParam(const TiXmlElement* root, const char* paramName, BaseObject* object, const Executor& executor, bool inLoadCycle = false);
90    virtual ~CLoadParam();
91
92    CLoadParam& describe(const char* descriptionText);
93    CLoadParam& defaultValues(unsigned int count, ...);
94    CLoadParam& attribute(const char* attributeName, const Executor& executor);
95
96
97  private:
98    bool                     inLoadCycle;
99    Executor*                executor;
100    BaseObject*              object;
101    const char*              paramName;
102
103    LoadClassDescription*    classDesc;            //!< The LoadClassDescription of this CLoadParameter
104    LoadParamDescription*    paramDesc;            //!< The LoadParameterDescription of this LoadParameter
105    const TiXmlElement*      loadElem;             //!< The Element to load.
106    const char*              loadString;           //!< The string loaded by this LoadParam
107    const void*              pointerToParam;       //!< A Pointer to a Parameter.
108
109    MultiType*               defaultValue;
110};
111
112// helper function
113
114const char* grabParameter(const TiXmlElement* root, const char* parameterName);
115const TiXmlElement* grabParameterElement(const TiXmlElement* root, const char* parameterName);
116
117#endif /* _LOAD_PARAM_H */
Note: See TracBrowser for help on using the repository browser.