Changeset 9869 in orxonox.OLD for trunk/src/lib/lang
- Timestamp:
- Oct 3, 2006, 12:19:30 AM (18 years ago)
- Location:
- trunk/src/lib/lang
- Files:
-
- 7 deleted
- 3 edited
- 4 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/lib/lang/Makefile.am
r9677 r9869 1 MAINSRCDIR=../.. 2 include $(MAINSRCDIR)/defs/include_paths.am 3 4 LIB_PREFIX=$(MAINSRCDIR)/lib 5 include $(MAINSRCDIR)/lib/BuildLibs.am 1 INCLUDES = -I../.. 2 INCLUDES +=-I.. 3 INCLUDES +=-I../util 6 4 7 5 noinst_LIBRARIES = libORXlang.a … … 9 7 libORXlang_a_SOURCES = \ 10 8 base_object.cc \ 11 class_list.cc \ 12 new_class_id.cc \ 13 new_object_list.cc 9 class_id.cc \ 10 object_list.cc 14 11 15 12 noinst_HEADERS = \ 16 13 base_object.h \ 17 class_list.h \ 18 new_class_id.h \ 19 new_object_list.h 20 21 22 23 24 25 ## THIS ALL IS JUST FOR TESTING!! 26 check_PROGRAMS = test_object_list 27 28 test_object_list_SOURCES = \ 29 test_object_list.cc 30 31 test_object_list_DEPENDENCIES = libORXlang.a 32 33 test_object_list_LDADD = \ 34 $(MAINSRCDIR)/util/libORXutils.a \ 35 $(libORXlibs_a_LIBRARIES_) \ 36 $(MAINSRCDIR)/world_entities/libORXwe.a \ 37 $(libORXlibs_a_LIBRARIES_) \ 38 $(MAINSRCDIR)/util/libORXutils.a 39 40 #test_object_list_LDADD = \ 41 libORXlang.a 14 class_id.h \ 15 object_list.h -
trunk/src/lib/lang/base_object.cc
r9406 r9869 1 2 3 1 /* 4 2 orxonox - the future of 3D-vertical-scrollers … … 19 17 #include "base_object.h" 20 18 19 #include "util/debug.h" 21 20 #include "util/loading/load_param.h" 22 #include "class_list.h" 21 22 ObjectListDefinition(BaseObject); 23 23 24 24 /** 25 25 * @brief sets the name from a LoadXML-Element 26 * @param root the element to load from26 * @param objectName: The name of the Object. 27 27 */ 28 28 BaseObject::BaseObject(const std::string& objectName) 29 29 { 30 this->classID = CL_BASE_OBJECT;31 30 this->className = "BaseObject"; 32 31 33 32 this->objectName = objectName; 34 this->classList = NULL;35 33 this->xmlElem = NULL; 36 37 //ClassList::addToClassList(this, this->classID, "BaseObject"); 34 this->registerObject(this, BaseObject::_objectList); 38 35 } 39 36 … … 43 40 BaseObject::~BaseObject () 44 41 { 45 ClassList::removeFromClassList(this); 42 /// Remove from the ObjectLists 43 ClassEntries::iterator it; 44 PRINTF(5)("Deleting Object of type %s::%s\n", this->getClassCName(), getCName()); 45 for (it = this->_classes.begin(); it != this->_classes.end(); ++it) 46 { 47 if (ORX_DEBUG >= 5) 48 assert((*it)._objectList->checkIteratorInList((*it)._iterator) || (*it)._objectList->checkObjectInList(this)); 49 (*it)._objectList->unregisterObject((*it)._iterator); 50 delete (*it)._iterator; 51 } 46 52 47 53 if (this->xmlElem != NULL) … … 69 75 70 76 /** 71 * @brief sets the class identifiers72 * @param id a number for the class from class_id.h enumeration73 * @param className the class name74 */75 void BaseObject::setClassID(ClassID classID, const std::string& className)76 {77 //printf("%s(0x%.8X)->%s(0x%.8X)\n", this->className, this->classID, className, classID);78 assert (!(this->classID & classID & !CL_MASK_SUBSUPER_CLASS_IDA ));79 80 this->leafClassID = classID;81 this->classID |= (long)classID;82 this->className = className;83 84 this->classList = ClassList::addToClassList(this, classID, this->classID, className);85 }86 87 88 /**89 77 * @brief set the name of the Object 90 78 * @param objectName The new name of the Object. … … 97 85 98 86 /** 99 * @brief queries for the ClassID of the Leaf Class (the last made class of this type 100 * @returns the ClassID of the Leaf Class (e.g. the ID of the Class) 101 * 102 * the returned ID can be used to generate new Objects of the same type through 103 * Factory::fabricate(Object->getLeafClassID()); 87 * @brief Seeks in the Inheritance if it matches objectList. 88 * @param objectList The ObjectList this should be a member of (by Pointer-comparison). 89 * @return True if found, false if not. 104 90 */ 105 const ClassID& BaseObject::getLeafClassID() const91 bool BaseObject::isA(const ObjectListBase& objectList) const 106 92 { 107 return this->leafClassID; 108 } 109 110 111 112 /** 113 * @brief checks if the class is a classID 114 * @param classID the Identifier to check for 115 * @returns true if it is, false otherwise 116 */ 117 bool BaseObject::isA (ClassID classID) const 118 { 119 // if classID is a derivable object from a SUPERCLASS 120 if (classID & CL_MASK_SUPER_CLASS) 121 { 122 if( likely(this->classID & classID)) 93 ClassEntries::const_iterator it; 94 for (it = this->_classes.begin(); it != this->_classes.end(); ++it) 95 if ((*it)._objectList == &objectList) 123 96 return true; 124 }125 // if classID is a SubSuperClass, and126 else if (classID & CL_MASK_SUBSUPER_CLASS)127 {128 if (likely(((this->classID & CL_MASK_SUBSUPER_CLASS_IDA) == (classID & CL_MASK_SUBSUPER_CLASS_IDA)) &&129 this->classID & classID & CL_MASK_SUBSUPER_CLASS_IDB))130 return true;131 }132 // if classID is a LOWLEVEL-class133 else134 {135 if( likely((this->classID & CL_MASK_LOWLEVEL_CLASS) == classID))136 return true;137 }138 97 return false; 139 98 } 140 99 141 100 101 /** 102 * @brief Seeks in the Inheritance if it matches objectList. 103 * @param classID The ClassID this should be a member of (by Pointer-comparison). 104 * @return True if found, false if not. 105 */ 106 bool BaseObject::isA(const ClassID& classID) const 107 { 108 ClassEntries::const_iterator it; 109 for (it = this->_classes.begin(); it != this->_classes.end(); ++it) 110 if (*(*it)._objectList == classID) 111 return true; 112 return false; 113 } 142 114 143 115 /** 144 * @brief checks if the class is a classID145 * @param classID the Identifier to check for146 * @return s true if it is, false otherwise116 * @brief Seeks in the Inheritance if it matches objectList. 117 * @param classID The ClassID of the class this should be a member of. 118 * @return True if found, false if not. 147 119 */ 148 bool BaseObject::isA (const std::string& className) const120 bool BaseObject::isA(int classID) const 149 121 { 150 ClassID classID = ClassList::StringToID(className); 151 if (classID != CL_NULL) 152 return this->isA(classID); 153 else 154 return false; 122 ClassEntries::const_iterator it; 123 for (it = this->_classes.begin(); it != this->_classes.end(); ++it) 124 if (*(*it)._objectList == classID) 125 126 return true; 127 return false; 128 } 129 130 /** 131 * @brief Seeks in the Inheritance if it matches objectList. 132 * @param className The ClassName of the class this should be a member of. 133 * @return True if found, false if not. 134 */ 135 bool BaseObject::isA(const std::string& className) const 136 { 137 ClassEntries::const_iterator it; 138 for (it = this->_classes.begin(); it != this->_classes.end(); ++it) 139 if (*(*it)._objectList == className) 140 return true; 141 return false; 155 142 } 156 143 157 144 158 145 /** 159 * @brief compares the ObjectName with an external name160 * @param objectName: the name to check.161 * @returns true on match, false otherwise.146 * @brief This is for debug purposes, to see the Inheritances of this Object and its classes. 147 * 148 * The Inheritance will be listed in a Linear fashion, diamand structures are resolved in a linear dependency. 162 149 */ 163 bool BaseObject::operator==(const std::string& objectName) const150 void BaseObject::listInheritance() const 164 151 { 165 return (this->objectName == objectName); 152 PRINT(0)("Listing inheritance diagram for %s::%s: ", getClassCName(), getCName()); 153 ClassEntries::const_iterator it; 154 for (it = this->_classes.begin(); it != this->_classes.end(); ++it) 155 PRINT(0)(" -> %s(id:%d)", (*it)._objectList->name().c_str(), (*it)._objectList->id()); 156 PRINT(0)("\n"); 157 166 158 } 167 -
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.