Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/trunk/src/lib/lang/class_list.h @ 7162

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

using vector instead of list in classList

File size: 3.6 KB
Line 
1/*!
2 * @file class_list.h
3  *  Definition of the Class List, that handles a Class-Specific-Control structure
4
5 */
6
7#ifndef _CLASS_LIST_H
8#define _CLASS_LIST_H
9
10#include "class_id.h"
11#include <list>
12#include <vector>
13#ifndef NULL
14#define NULL     0    //!< NULL
15#endif
16
17// FORWARD DECLARATION
18class BaseObject;
19
20//! A class that handles Pointers to Objects of all type.
21/**
22 * here all the Pointers to all the Object of orxonox are stored, that implement BaseObject
23 * for now.
24 * You can get Any Object's Reference to BaseObject with dynamic_cast<T>(ClassList::getObject(name, CL_T_NAME));
25 *  where: T: is the Class to cast to,
26 *   name: the name of the Object (not className)
27 *   CL_T_NAME: the class Identifier, (if CL_NULL or nothing it will take longer, because all BaseObject's are searched through)
28 *
29 * There is also the exists-function, that just checks, if a Reference is still in existence.
30 *
31 * @see ClassID, BaseObject, dynamic_cast
32 */
33class ClassList {
34  public:
35    ClassList(ClassID classID, unsigned long classIDFull, const char* className);
36    virtual ~ClassList();
37
38    /* MAINTENANCE FUNCTIONS THESE ARE !!ONLY FOR BASEOBJECT !! */
39    static ClassList*                     addToClassList(BaseObject* objectPointer, ClassID classID, unsigned long classIDFull, const char* className);
40    static void                           removeFromClassList(BaseObject* objectPointer);
41
42
43
44    static const std::list<BaseObject*>*  getList(ClassID classID = CL_NULL);// { return (ClassList* fl = ClassList::getClassList(classID) != NULL)? &(fl->objectList) : NULL; };
45    static const std::list<BaseObject*>*  getList(const char* className); // { return (ClassList* fl = ClassList::getClassList(className) != NULL)? &(fl->objectList) : NULL;  };
46    static const std::list<const char*>*  getClassNames();
47    static BaseObject*                    getObject(const char* name, ClassID classID = CL_NULL);
48    static bool                           exists(const BaseObject* object, ClassID classID = CL_NULL);
49
50    void                                  sendBack(std::list<BaseObject*>::const_iterator it);
51
52    static void                           whatIs(const BaseObject* object);
53
54    static const char*                    IDToString(ClassID classID = CL_NULL);
55    static ClassID                        StringToID(const char* className);
56    static void                           debug(unsigned int debugLevel = 0, ClassID classID = CL_NULL);
57    static void                           debugS(const char* className = NULL, unsigned int debugLevel = 0);
58
59    inline bool                           operator==(ClassID classID) { return (this->classID == classID); };
60    bool                                  operator==(const char* className);
61    inline ClassID                        getLeafClassID() const { return this->classID; };
62
63  private:
64    static ClassList*                     getClassList(ClassID classID);
65    static ClassList*                     getClassList(const char* className);
66
67  private:
68    ClassID                         classID;                //!< ClassID stored in this ClassList
69    unsigned long                   classIDFull;            //!< The Full ClassID of this Class.
70
71    const char*                     className;              //!< Name of the Class Stored here
72
73    std::list<BaseObject*>          objectList;             //!< A list of Objects belonging to this Class
74
75    // STATIC MEMBERS
76    static std::vector<ClassList>*  classList;              //!< The list of ClassLists.
77    static std::list<const char*>   classNames;             //!< a List of all Names of all classes, that have registered so far.
78};
79
80#endif /* _CLASS_LIST_H */
Note: See TracBrowser for help on using the repository browser.