Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/trunk/src/lib/lang/new_class_id.h @ 9723

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

orxonox/trunk: sync

File size: 2.3 KB
Line 
1/*!
2 * @file new_class_id.h
3 * @brief Definition of a dynamically allocating ClassID
4 *
5 */
6
7#ifndef _NEW_CLASS_ID_H
8#define _NEW_CLASS_ID_H
9
10#include "new_object_list.h"
11
12#include <string>
13#include <list>
14
15//! A class to dynamically allocate ClassID's and support a isA operator
16class NewClassID
17{
18public:
19  NewClassID();
20  ~NewClassID();
21
22  /** @returns the ClassName of the Topmost Object of the ClassStack */
23  inline const std::string& getClassName() const { return _classes.front()._objectList->name(); }
24  /** @returns the ID of the Topmost object of the ClassStack */
25  inline int leafClassID() const { return _classes.front()._objectList->id(); }
26
27  template<class T> void registerObject(T* object, NewObjectList<T>& list);
28  bool isA(const NewObjectListBase& objectList) const;
29  bool isA(int classID) const;
30  bool isA(const std::string& className) const;
31
32  void listInheritance() const;
33
34private:
35  //////////////////////////////
36  //// Type Definition Part ////
37  //////////////////////////////
38  //! A ClassEntry so we can store Classes inside of Objects
39  struct ClassEntry
40  {
41    /** Simple Constuctor @param objectList the NewObjectList, @param iterator the (intrusive) Iterator inside of the ObjectList */
42    inline ClassEntry (NewObjectListBase* objectList, NewObjectListBase::IteratorBase* iterator) : _objectList(objectList), _iterator(iterator) {}
43    NewObjectListBase*                _objectList;  //!< A ObjectList this Object is part of
44    NewObjectListBase::IteratorBase*  _iterator;    //!< An iterator pointing to the position of the Object inside of the List.
45  };
46  typedef std::list<ClassEntry>        ClassList;   //!< Type definition for the List.
47
48  ClassList                           _classes;     //!< All Classes this object is part of.
49};
50
51
52/**
53 * @brief Registeres an Object of Type T to objectList
54 * @param object The Object to append to the objectList.
55 * @param objectList The ObjectList to append the Object to.
56 *
57 * This function is essential to integrate objects into their designated ObjectList.
58 * Remember if you do not want objects to be stored in Lists (less overhead),
59 * do not attempt to call this function.
60 */
61template<class T>
62inline void NewClassID::registerObject(T* object, NewObjectList<T>& objectList)
63{
64  this->_classes.push_front(ClassEntry(&objectList, objectList.registerObject(object)));
65}
66
67#endif /* _NEW_CLASS_ID_H */
Note: See TracBrowser for help on using the repository browser.