Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/objecthierarchie/src/ClassHierarchy.h @ 147

Last change on this file since 147 was 132, checked in by landauf, 17 years ago
File size: 3.1 KB
Line 
1#ifndef _ClassHierarchy_H__
2#define _ClassHierarchy_H__
3
4#include <string>
5
6// DONE:
7// - klassenhierarchie aufbauen
8// - klassen-identifier
9
10// TODO:
11// - durch listen iterieren
12// - isA usw vergleiche
13// - new überladen + objekt in liste eintragen
14// - searchtree für classname-strings
15
16//namespace orxonox
17//{
18    class ClassName;
19    class ClassList;
20    class ObjectList;
21    class BaseObject;
22
23    template <class T>
24    class ClassNameSingleton
25    {
26        public:
27            static ClassName* getClassName(BaseObject* object, bool bIsRootClass);
28            static ClassName* getNewClassName();
29            BaseObject* create();
30
31        private:
32            ClassNameSingleton();
33            ~ClassNameSingleton();
34            static ClassNameSingleton *pointer;
35            static ClassName *className;
36    };
37
38    class ClassName
39    {
40        public:
41            ClassName(const std::string& name, ClassNameSingleton<class T>* factory);
42            ~ClassName();
43
44            std::string name;
45            ClassName *parentClass;
46            ClassList *childClasses;
47            ObjectList *objects;
48            ClassNameSingleton<class T> *factory;
49    };
50
51    class ClassListItem
52    {
53        public:
54            ClassListItem(ClassName* className);
55            ~ClassListItem();
56
57            ClassListItem *next;
58            ClassName *className;
59    };
60
61    class ClassList
62    {
63        public:
64            ClassList();
65            ~ClassList();
66            void add(ClassName* className);
67
68            ClassListItem *first;
69    };
70
71    class ObjectListItem
72    {
73        public:
74            ObjectListItem(BaseObject* object);
75            ~ObjectListItem();
76
77            ObjectListItem *next;
78            BaseObject *object;
79    };
80
81    class ObjectList
82    {
83        public:
84            ObjectList();
85            ~ObjectList();
86            void add(BaseObject* object);
87            void remove(BaseObject* object);
88
89            ObjectListItem *first;
90    };
91
92    class ClassNameTree
93    {
94        public:
95            static ClassNameTree* getSingleton();
96            BaseObject* create(ClassName* className);
97            BaseObject* create(std::string& name);
98            ClassName* getClassName(std::string& name);
99            ClassName* getClassName(std::string& name, ClassName* root);
100            ClassName* getRootClass() { return this->rootClass; }
101            void setRootClass(ClassName* className) { this->rootClass = className; }
102
103        private:
104            ClassNameTree();
105            ~ClassNameTree();
106            static ClassNameTree *pointer;
107            ClassName* rootClass;
108    };
109
110
111    #define className(ClassName) \
112        ClassNameSingleton<ClassName>::getNewClassName()
113
114    #define registerObject(ClassName, bIsRootClass) \
115        this->className = ClassNameSingleton<ClassName>::getClassName(this, bIsRootClass)
116
117    #define unregisterObject() \
118        this->className->objects->remove(this)
119
120    #define factory(ClassName) \
121        ClassNameTree::getSingleton()->create(ClassName)
122//}
123
124#endif
Note: See TracBrowser for help on using the repository browser.