Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/branches/heathaze/src/lib/util/executor/executor_xml.h

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

orxonox/trunk: merged the new_class_id branche back to the trunk.
merged with command:
svn merge https://svn.orxonox.net/orxonox/branches/new_class_id trunk -r9683:HEAD
no conflicts… puh..

File size: 2.3 KB
Line 
1/*!
2 * @file executor_xml.h
3 * Definition of a on-screen-shell
4 */
5
6#ifndef _EXECUTOR_XML_H
7#define _EXECUTOR_XML_H
8
9#include "executor.h"
10#include "compiler.h"
11#include "debug.h"
12
13#include "parser/tinyxml/tinyxml.h"
14
15//! Executes a Function with a const TiXmlElement* parameter.
16/**
17 * This is a Special Executor, that finds ParamName in root as XML-sub-element
18 * This is especially usefull, if you have to Load a SubElement from root in a new Function
19 * What must be defined is a XML-root to search the ParameterName under an  a Function to call.
20 */
21template<class T, class BaseClass = BaseObject> class ExecutorXML : public Executor<const TiXmlElement*>
22{
23public:
24  /**
25   * @brief Constructor of a ExecutorXML
26   * @param function a Function to call
27   * @param root The XML root to search paramName under
28   * @param paramName the ParameterName the search in root, and lookup the TiXmlElement from
29   */
30  ExecutorXML(void(T::*function)(const TiXmlElement*), const TiXmlElement* root, const std::string& paramName)
31      : Executor<const TiXmlElement*>(false, MT_EXT1)
32  {
33    PRINTF(4)("Loading %s from XML-element %p\n", paramName.c_str(), root);
34
35    if (likely(root != NULL))
36      this->element = root->FirstChildElement(paramName);
37    else
38      this->element = NULL;
39
40    this->paramName = paramName;
41    this->functionPointer = function;
42  }
43
44  /**
45   * @brief clones an ExecutorXML, used to copy this Element.
46   * @returns a _new_ Copy of this Executor
47   */
48  virtual Executor<const TiXmlElement*>* clone () const
49  {
50    return new ExecutorXML<T>(functionPointer, element, paramName);
51  }
52
53  /**
54   * @brief executes the Command on BaseObject
55   * @param object the BaseObject to execute this Executor on
56   * @param element ignored in this case
57   */
58  virtual void operator()(BaseObject* object, const TiXmlElement*& element) const
59  {
60    assert (object != NULL);
61    if (this->element != NULL)
62      (dynamic_cast<T*>(object)->*(functionPointer))(this->element);
63  }
64
65private:
66  void    (T::*functionPointer)(const TiXmlElement*);  //!< The functionPointer to the function to be called.
67  const   TiXmlElement* element;                       //!< The XML-element to call.
68  std::string           paramName;                     //!< The Name of the Parameter this Executor should call.
69};
70
71#endif /* _EXECUTOR_XML_H */
Note: See TracBrowser for help on using the repository browser.