Changeset 6142 in orxonox.OLD for trunk/src/util/object_manager.cc
- Timestamp:
- Dec 16, 2005, 7:13:57 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/util/object_manager.cc
r5828 r6142 10 10 11 11 ### File Specific: 12 main-programmer: ...12 main-programmer: Benjamin Grauer 13 13 co-programmer: ... 14 14 */ … … 19 19 #include "class_list.h" 20 20 21 #include "p_node.h"22 21 #include "world_entity.h" 23 #include "list.h" 22 23 #include "shell_command.h" 24 25 #include <assert.h> 24 26 25 27 using namespace std; 26 27 28 /** 29 * standard constructor 28 SHELL_COMMAND(debug, ObjectManager, debug) 29 ->defaultValues(2, NULL, 0); 30 31 /** 32 * @brief standard constructor 30 33 */ 31 34 ObjectManager::ObjectManager () … … 37 40 } 38 41 39 /** 40 * the singleton reference to this class 41 */ 42 ObjectManager* ObjectManager::singletonRef = NULL; 43 44 /** 45 @brief standard deconstructor 42 43 /** 44 * @brief standard deconstructor 45 * 46 * this also removes ALL entitites in existence. 46 47 */ 47 48 ObjectManager::~ObjectManager () 48 49 { 49 ObjectManager::singletonRef = NULL; 50 } 50 this->flush(); 51 } 52 53 /** 54 * @brief flushes all entities 55 * 56 * this function deletes all entities that exist within the ObjectManager. 57 * It does this by poping each list from the front, and delete the given object. 58 * 59 * automatically called by a destructor. 60 */ 61 void ObjectManager::flush() 62 { 63 for (unsigned int i = 0; i < OM_SIZE; ++i) 64 while(!this->objectLists[i].empty()) 65 delete this->objectLists[i].front(); 66 } 67 68 69 /** 70 * @brief moves an Entity from an old list to a new One 71 * @param entity the entity to move. 72 * @param omList the new List to move the entity to. 73 * 74 * this will erase the entity from the old list 75 */ 76 void ObjectManager::toList (WorldEntity* entity, OM_LIST omList) 77 { 78 assert (omList != OM_SIZE); 79 80 if (likely(entity->getOMListNumber() != OM_INIT)) 81 this->objectLists[entity->getOMListNumber()].erase(entity->getEntityIterator()); 82 83 if (likely(omList != OM_INIT)) 84 { 85 this->objectLists[omList].push_back(entity); 86 entity->getEntityIterator() = --this->objectLists[omList].end(); 87 entity->getOMListNumber() = omList; 88 } 89 } 90 91 92 /** 93 * @see ObjectManager::toList(WorldEntity* OM_LIST) 94 * @param entity the entity to move. 95 * @param omList the new List to move the entity to. 96 * 97 * this function also does a transformation from omList as char* to OM_LIST. 98 */ 99 void ObjectManager::toList (WorldEntity* entity, const char* omList) 100 { 101 this->toList(entity, ObjectManager::StringToOMList(omList)); 102 } 103 104 51 105 52 106 /** … … 68 122 return NULL; 69 123 } 124 125 126 /** 127 * @brief print out nice debug information about Elements in the list OM_LIST 128 * @param omList the List to debug. 129 * @param level: level 0: only show list info; level 1: also show entities and their names. 130 */ 131 void ObjectManager::debug(OM_LIST omList, unsigned int level) const 132 { 133 if (omList != OM_INIT || omList == OM_SIZE) 134 { 135 PRINT(0)(" +ObjectManager-LIST: '%s'==size='%d'==---\n", ObjectManager::OMListToString((OM_LIST)omList), this->objectLists[omList].size()); 136 // if (level >= 1) 137 { 138 std::list<WorldEntity*>::const_iterator entity; 139 for (entity = this->objectLists[omList].begin(); entity != this->objectLists[omList].end(); entity++) 140 { 141 PRINT(0)(" | %s::%s\n",(*entity)->getClassName(), (*entity)->getName()); 142 } 143 } 144 } 145 else 146 PRINTF(2)("Invalid query. for OM_INIT-LIST or OM_SIZE\n"); 147 } 148 149 150 /** 151 * @brief prints out very nice debug information 152 * @param listName the Name of the list to get Debug information from 153 * @param level: level 0: only show list info; level 1: also show entities and their names. 154 */ 155 void ObjectManager::debug(const char* listName, unsigned int level) 156 { 157 PRINT(0)("=================================\n"); 158 PRINT(0)("=ObjectManager-DEBUG=============\n"); 159 PRINT(0)("=================================\n"); 160 if (listName == NULL || listName[0] == '\0') 161 for (unsigned int i = 0; i < OM_SIZE; ++i) 162 debug((OM_LIST) i, level); 163 else 164 debug(ObjectManager::StringToOMList(listName)); 165 PRINT(0)("=========================== OM ==\n"); 166 } 167 168 169 170 /** 171 * @brief transforms an omList into a String (usefull for debugging). 172 * @param omList the OM_LIST to be transformed into a String. 173 * @returns the String transformed from omList. 174 */ 175 const char* ObjectManager::OMListToString(OM_LIST omList) 176 { 177 if (omList == OM_INIT || omList == OM_SIZE) 178 return "===invalid==="; 179 180 printf("%d\n", omList); 181 return ObjectManager::objectManagerListNames[omList]; 182 } 183 184 185 186 /** 187 * @brief transforms a String into an OM_LIST (usefull for debugging/Loading). 188 * @param listName the OM_LIST-name to be transformed into an OM_LIST. 189 * @returns the OM_LIST transformed from listName. or the default, if not found or NULL. 190 */ 191 OM_LIST ObjectManager::StringToOMList(const char* listName) 192 { 193 if (unlikely(listName == NULL)) return OM_DEFAULT_LIST; 194 195 for(unsigned int i = 0; i < OM_SIZE; ++i) { 196 if(!strcmp(listName, ObjectManager::objectManagerListNames[i])) { 197 return (OM_LIST)i; 198 } 199 } 200 return OM_DEFAULT_LIST; 201 } 202 203 204 205 const char* ObjectManager::objectManagerListNames[] = { 206 "null", 207 "dead", 208 "dead-tick", 209 "environ-notick", 210 "environ", 211 "common", 212 213 "group00", 214 "group00-proj", 215 "group01", 216 "group01-proj", 217 "group02", 218 "group02-proj", 219 "group03", 220 "group03-proj", 221 "group04", 222 "group04-proj", 223 "group05", 224 "group05-proj", 225 "group06", 226 "group06-proj", 227 "group07", 228 "group07-proj", 229 "group08", 230 "group08-proj", 231 "group09", 232 "group09-proj", 233 "group10", 234 "group10-proj", 235 "group11", 236 "group11-proj", 237 "group12", 238 "group12-proj", 239 "group13", 240 "group13-proj", 241 "group14", 242 "group14-proj", 243 "group15", 244 "group15-proj" 245 };
Note: See TracChangeset
for help on using the changeset viewer.