Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/orxonox/trunk/src/factory.h @ 4152

Last change on this file since 4152 was 4133, checked in by bensch, 20 years ago

orxonox/trunk: cleanup in gui: less useless output

File size: 1.6 KB
Line 
1/*!
2    \file factory.h
3    \brief philosophy stuff
4*/
5
6#ifndef _FACTORY_H
7#define _FACTORY_H
8
9class BaseObject;
10
11#include "xmlparser/tinyxml.h"
12
13/**
14    Creates a factory to a Loadable Class.
15    this should be used at the beginning of all the Classes that should be loadable (in the cc-file)
16*/
17#define CREATE_FACTORY(x) tFactory<x>* global_ ## x ## Factory = new tFactory<x>(#x)
18
19
20               
21//! The Factory is
22/**
23   Very philosophic description, huh?
24*/
25class Factory {
26
27 public:
28  Factory (const char* name = NULL);
29  ~Factory ();
30 
31
32  virtual BaseObject* fabricate( TiXmlElement* root);
33  void initialize();
34  void registerFactory( Factory* factory);
35  void setFactoryName(const char* name);
36  const char* getFactoryName() {return factoryName;};
37  void setNext( Factory* factory) {next = factory;}
38  Factory* getNext() {return next;}
39       
40 private:
41  char* factoryName;
42       
43  Factory* next;
44};
45
46template<class T> class tFactory : public Factory
47{
48 public:
49  tFactory(const char* name);
50  virtual ~tFactory();
51 
52  private:
53  BaseObject* fabricate( TiXmlElement* root);
54};
55
56template<class T>
57tFactory<T>::tFactory(const char* name) : Factory(name)
58{
59  PRINTF(5)("fileName: %s\n", name);
60}
61 
62
63template<class T>
64tFactory<T>::~tFactory()
65{}
66
67template<class T>
68BaseObject* tFactory<T>::fabricate( TiXmlElement* root) 
69{ 
70  if(!strcmp(root->Value(), getFactoryName()))
71    return new T ( root);
72  else if( getNext() != NULL) 
73    return getNext()->fabricate( root);
74  else 
75    return NULL;
76}
77
78// helper function
79
80const char* grabParameter( TiXmlElement* root, const char* name);
81
82#endif /* _FACTORY_H */
83
Note: See TracBrowser for help on using the repository browser.