Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/trunk/src/lib/lang/new_class_list.h @ 9660

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

orxonox/trunk: dynamic class ID is on its way

File size: 1.4 KB
Line 
1/*!
2 * @file new_class_list.h
3 * @brief Definition of a dynamically allocating ClassID
4 *
5 */
6
7#ifndef _NEW_CLASS_LIST_H
8#define _NEW_CLASS_LIST_H
9
10#include "type_info.h"
11#include <set>
12#include <string>
13
14#define DeclareClass(ClassName) \
15   NewClassList ClassID_##ClassName(ClassName)
16
17#define DeclareInClass(ClassName) \
18   NewClassList classList(ClassName)
19
20class NewClassListBase
21{
22public:
23  int id() const { return _id; };
24  const std::string& name() const { return _name; };
25
26  static int classCount() { return _idCounter; };
27
28protected:
29  NewClassListBase(const std::string& className);
30private:
31  NewClassListBase(const NewClassListBase&);
32
33
34private:
35  int                           _id;
36  std::string                   _name;
37
38private:
39  static int                           _idCounter;      //!< A counter, that gives all classes a Unique ClassID. Access to this Variable is to be Thread-Safe.
40  static std::set<NewClassListBase>    _classes;        //!< A Set of all the classes in existance.
41};
42
43template<class T> class NewClassList : public NewClassListBase
44{
45public:
46  NewClassList(const std::string& name);
47  ~NewClassList();
48
49private:
50  //! the copy constructor will be hidden.
51  NewClassList(const NewClassList& definer) {};
52};
53
54template <class T>
55NewClassList<T>::NewClassList(const std::string& name)
56    : NewClassListBase(name)
57{}
58
59template <class T>
60NewClassList<T>::~NewClassList()
61{}
62
63
64#endif /* _NEW_CLASS_LIST_H */
Note: See TracBrowser for help on using the repository browser.