Changeset 9675 in orxonox.OLD for trunk/src/lib/lang/new_object_list.cc
- Timestamp:
- Aug 21, 2006, 10:57:35 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/lib/lang/new_object_list.cc
r9671 r9675 23 23 : _id(-1), _name(className) 24 24 { 25 if (NewObjectListBase::_classes == NULL) 26 NewObjectListBase::_classes = new cSet; 25 if (NewObjectListBase::_classesByID == NULL) 26 { 27 NewObjectListBase::_classesByID = new classIDMap; 28 assert (NewObjectListBase::_classesByName == NULL); 29 NewObjectListBase::_classesByName = new classNameMap; 30 } 31 assert(!NewObjectListBase::classNameExists(className) && "Classes should only be included once, and no two classes should have the same name/ID (key value)"); 27 32 28 29 assert(!NewObjectListBase::classNameExists(className) && "Classes should not be included once, and no two classes should have the same name (key value)");30 33 31 34 this->_id = NewObjectListBase::_idCounter++; 32 35 36 (*NewObjectListBase::_classesByID)[this->_id] = this; 37 (*NewObjectListBase::_classesByName)[this->_name] = this; 33 38 } 34 39 35 40 NewObjectListBase::~NewObjectListBase() 36 41 { 42 NewObjectListBase::_classesByName->erase(this->_name); 43 NewObjectListBase::_classesByID->erase(this->_id); 37 44 45 if (NewObjectListBase::_classesByID->empty()) 46 { 47 delete NewObjectListBase::_classesByID; 48 NewObjectListBase::_classesByID = NULL; 49 assert(NewObjectListBase::_classesByName != NULL); 50 delete NewObjectListBase::_classesByName; 51 NewObjectListBase::_classesByName = NULL; 52 } 38 53 } 39 54 40 55 int NewObjectListBase::_idCounter = 0; 41 NewObjectListBase::cSet* NewObjectListBase::_classes = NULL; 56 NewObjectListBase::classIDMap* NewObjectListBase::_classesByID = NULL; 57 NewObjectListBase::classNameMap* NewObjectListBase::_classesByName = NULL; 42 58 43 59 … … 50 66 bool NewObjectListBase::classNameExists(const std::string& name) 51 67 { 52 cSet::iterator it; 53 for (it = NewObjectListBase::_classes->begin(); it != NewObjectListBase::_classes->end(); it++) 54 if(*it != NULL && (*it)->name() != name) 55 return true; 56 return false; 68 return (NewObjectListBase::_classesByName->find(name) != NewObjectListBase::_classesByName->end()); 69 // classNameMap::iterator it; 70 // for (it = NewObjectListBase::_classesByID->begin(); it != NewObjectListBase::_classesByID->end(); it++) 71 // if(*it != NULL && (*it)->name() != name) 72 // return true; 73 // return false; 57 74 } 75 76 77 /** 78 * @brief Converts an ID into a ClassName String. 79 * @param classID The ID to convert. 80 * @return The ClassName or an empty string if the ID was not found. 81 */ 82 const std::string& NewObjectListBase::IDToString(int classID) 83 { 84 assert (NewObjectListBase::_classesByID != NULL); 85 NewObjectListBase::classIDMap::iterator it = NewObjectListBase::_classesByID->find(classID); 86 if (it != NewObjectListBase::_classesByID->end()) 87 return (*it).second->name(); 88 else 89 { 90 static std::string empty; 91 return empty; 92 } 93 } 94 95 96 /** 97 * @brief Converts a String into an ID 98 * @param className the Name of the Class to search for 99 * @return The Classes ID if found, -1 otherwise. 100 */ 101 int NewObjectListBase::StringToID(const std::string& className) 102 { 103 assert (NewObjectListBase::_classesByName != NULL); 104 NewObjectListBase::classNameMap::iterator it = NewObjectListBase::_classesByName->find(className); 105 if (it != NewObjectListBase::_classesByName->end()) 106 return (*it).second->id(); 107 else 108 return -1; 109 } 110
Note: See TracChangeset
for help on using the changeset viewer.