Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

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

ClassList seems to work as it should.

File size: 2.0 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
16
17
18//! A class to dynamically allocate ClassID's and support a isA operator
19class NewClassID
20{
21public:
22  NewClassID();
23  ~NewClassID();
24
25
26  template<class T> void registerObject(T* object, NewObjectList<T>& list);
27  bool isA(const NewObjectListBase& objectList) const;
28  bool isA(int id) const;
29  bool isA(const std::string& className) const;
30
31private:
32
33  //////////////////////////////
34  //// Type Definition Part ////
35  //////////////////////////////
36  //! A ClassEntry so we can store Classes inside of Objects
37  struct ClassEntry{
38    /** Simple Constuctor @param objectList the NewObjectList, @param iterator the (intrusive) Iterator inside of the ObjectList */
39    inline ClassEntry (NewObjectListBase* objectList, NewObjectListBase::IteratorBase* iterator) : _objectList(objectList), _iterator(iterator) {}
40    NewObjectListBase*                _objectList;  //!< A ObjectList this Object is part of
41    NewObjectListBase::IteratorBase*  _iterator;    //!< An iterator pointing to the position of the Object inside of the List.
42  };
43  typedef std::list<ClassEntry>        ClassList;   //!< Type definition for the List.
44  ClassList                           _classes;     //!< All Classes this object is part of.
45};
46
47
48/**
49 * @brief Registeres an Object of Type T to objectList
50 * @param object The Object to append to the objectList.
51 * @param objectList The ObjectList to append the Object to.
52 *
53 * This function is essential to integrate objects into their designated ObjectList.
54 * Remember if you do not want objects to be stored in Lists (less overhead),
55 * do not attempt to call this function.
56 */
57template<class T>
58    inline void NewClassID::registerObject(T* object, NewObjectList<T>& objectList)
59{
60  this->_classes.push_back(ClassEntry(&objectList, objectList.registerObject(object)));
61}
62
63#endif /* _NEW_CLASS_ID_H */
Note: See TracBrowser for help on using the repository browser.