Changeset 9869 in orxonox.OLD for trunk/src/lib/lang/base_object.h
- Timestamp:
- Oct 3, 2006, 12:19:30 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/lib/lang/base_object.h
r9406 r9869 14 14 #define __BASE_OBJECT_H_ 15 15 16 #include " class_id.h"17 #include " sigslot/slot.h"16 #include "object_list.h" 17 #include "util/sigslot/slot.h" 18 18 19 19 #include <string> … … 26 26 class BaseObject : public sigslot::has_slots<> 27 27 { 28 28 //! Declare an ObjectList for this Class. 29 ObjectListDeclaration(BaseObject); 29 30 public: 30 31 BaseObject (const std::string& objectName = ""); … … 41 42 inline TiXmlNode* getXmlElem() const { return this->xmlElem; }; 42 43 43 / ** @returns the className of the corresponding Object */44 inline const std::string& getClassName() const { return this->className; }44 // /** @returns the className of the corresponding Object */ 45 //inline const std::string& getClassName() const { return this->className; } 45 46 /** @returns the className of the corresponding Object as a C-compliant string (const char*) */ 46 inline const char* getClassCName() const { return this->className.c_str(); }; 47 /** @returns the classID of the corresponding Object */ 48 inline int getClassID() const { return this->classID; }; 49 const ClassID& getLeafClassID() const; 47 inline const char* getClassCName() const { return _classes.front()._objectList->name().c_str(); }; 48 /** @returns the ClassName of the Topmost Object of the ClassStack */ 49 inline const std::string& getClassName() const { return _classes.front()._objectList->name(); }; 50 50 51 bool isA (ClassID classID) const; 52 bool isA (const std::string& className) const; 51 /** @returns the ClassID of this Object */ 52 inline const ClassID& getClassID() const { return _classes.front()._objectList->identity(); } 53 /** @returns the ID of the Topmost object of the ClassStack */ 54 inline const int& getLeafClassID() const { return _classes.front()._objectList->identity().id(); } 55 56 bool isA(const ObjectListBase& objectList) const; 57 bool isA(const ClassID& classID) const; 58 bool isA(int classID) const; 59 bool isA(const std::string& className) const; 60 61 void listInheritance() const; 53 62 54 63 /** @param classID comparer for a ClassID @returns true on match, false otherwise */ 55 bool operator==(ClassID classID) const { return this->isA(classID); }; 56 bool operator==(const std::string& objectName) const; 64 bool operator==(int classID) const { return this->isA(classID); }; 65 /** @param objectName: the name to check. * @returns true on match, false otherwise. */ 66 bool operator==(const std::string& objectName) const { return this->objectName == objectName;}; 57 67 58 68 protected: 59 void setClassID(ClassID classID, const std::string& className);69 template<class T> void registerObject(T* object, ObjectList<T>& list); 60 70 61 71 protected: … … 63 73 64 74 private: 65 std::string className; //!< the name of the class66 long classID; //!< this is the id from the class_id.h enumeration67 ClassID leafClassID; //!< The Leaf Class ID68 69 ClassList* classList; //!< Pointer to the ClassList this Object is inside of70 75 71 76 TiXmlNode* xmlElem; //!< The XML Element with wich this Object was loaded(saved). 77 78 ////////////////////////////// 79 //// Type Definition Part //// 80 ////////////////////////////// 81 //! A ClassEntry so we can store Classes inside of Objects 82 struct ClassEntry 83 { 84 /** Simple Constuctor @param objectList the ObjectList, @param iterator the (intrusive) Iterator inside of the ObjectList */ 85 inline ClassEntry (ObjectListBase* objectList, ObjectListBase::IteratorBase* iterator) : _objectList(objectList), _iterator(iterator) {} 86 ObjectListBase* _objectList; //!< An ObjectList this Object is part of 87 ObjectListBase::IteratorBase* _iterator; //!< An iterator pointing to the position of the Object inside of the List. 88 }; 89 typedef std::list<ClassEntry> ClassEntries; //!< Type definition for the List. 90 91 std::string className; //!< the name of the class 92 ClassEntries _classes; //!< All Classes this object is part of. 72 93 }; 73 94 95 96 /** 97 * @brief Registeres an Object of Type T to objectList 98 * @param object The Object to append to the objectList. 99 * @param objectList The ObjectList to append the Object to. 100 * 101 * This function is essential to integrate objects into their designated ObjectList. 102 * Remember if you do not want objects to be stored in Lists (less overhead), 103 * do not attempt to call this function. 104 */ 105 template<class T> 106 inline void BaseObject::registerObject(T* object, ObjectList<T>& objectList) 107 { 108 this->_classes.push_front(ClassEntry(&objectList, objectList.registerObject(object))); 109 } 110 74 111 #endif /* __BASE_OBJECT_H_ */
Note: See TracChangeset
for help on using the changeset viewer.