Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/orxonox/branches/heightMap/src/factory.h @ 4736

Last change on this file since 4736 was 4165, checked in by bensch, 20 years ago

orxonox/branches/heightMap: merged trunk back to the heightMap branche
merged with command:
svn merge trunk/ branches/heightMap/ -r 4122:HEAD

File size: 1.6 KB
RevLine 
[3940]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
[4004]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*/
[4005]17#define CREATE_FACTORY(x) tFactory<x>* global_ ## x ## Factory = new tFactory<x>(#x)
[4004]18
19
[4003]20               
[3940]21//! The Factory is
22/**
[4003]23   Very philosophic description, huh?
[3940]24*/
25class Factory {
26
27 public:
[4004]28  Factory (const char* name = NULL);
[3940]29  ~Factory ();
[4003]30 
[3940]31
[4003]32  virtual BaseObject* fabricate( TiXmlElement* root);
33  void initialize();
34  void registerFactory( Factory* factory);
[4020]35  void setFactoryName(const char* name);
36  const char* getFactoryName() {return factoryName;};
[4003]37  void setNext( Factory* factory) {next = factory;}
38  Factory* getNext() {return next;}
[3940]39       
40 private:
[4020]41  char* factoryName;
[3940]42       
43  Factory* next;
44};
45
[4004]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{
[4165]59  PRINTF(5)("fileName: %s\n", name);
[4004]60}
61 
62
63template<class T>
64tFactory<T>::~tFactory()
65{}
66
67template<class T>
68BaseObject* tFactory<T>::fabricate( TiXmlElement* root) 
69{ 
[4020]70  if(!strcmp(root->Value(), getFactoryName()))
[4004]71    return new T ( root);
72  else if( getNext() != NULL) 
73    return getNext()->fabricate( root);
74  else 
75    return NULL;
76}
77
[3940]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.