Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

Last change on this file since 4010 was 4010, checked in by bensch, 19 years ago

orxonox/trunk: merged the levelloader from lltrunktemp to the trunk. Big thanks to fuzzy to make this so easy for us, and for implementing it in the first place.

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);
[4004]35  void setClassname(const char* name);
36  const char* getClassname() {return classname;};
[4003]37  void setNext( Factory* factory) {next = factory;}
38  Factory* getNext() {return next;}
[3940]39       
40 private:
[4003]41  char* classname;
[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{
59  printf("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(), getClassname()))
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
[4004]82
83
84
[3940]85#endif /* _FACTORY_H */
86
Note: See TracBrowser for help on using the repository browser.