Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

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

trunk: ClassList is a friend of BaseObject, so that the addToClassList and removeFromClassList functions can be private

recently those functions were used, where they should not have been.

this problem could also arise in the ObjectManager, if someone uses the internal functions from there

maybe friending there too soon (after the 8'th july :) )

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