Changeset 7203 in orxonox.OLD for branches/std/src/lib/util/loading
- Timestamp:
- Mar 9, 2006, 5:28:10 PM (19 years ago)
- Location:
- branches/std/src/lib/util/loading
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/std/src/lib/util/loading/game_loader.cc
r7193 r7203 86 86 * this will interprete the map/campaign files and recursivly load a tree of worlds/campaigns 87 87 */ 88 ErrorMessage GameLoader::loadCampaign(const char*fileName)88 ErrorMessage GameLoader::loadCampaign(const std::string& fileName) 89 89 { 90 90 ErrorMessage errorCode; 91 char*campaignName = ResourceManager::getFullName(fileName);92 if ( campaignName)91 std::string campaignName = ResourceManager::getFullName(fileName); 92 if (!campaignName.empty()) 93 93 { 94 94 this->currentCampaign = this->fileToCampaign(campaignName); 95 delete[] campaignName;96 95 } 97 96 } … … 105 104 * this will interprete the map/campaign files and recursivly load a tree of worlds/campaigns 106 105 */ 107 ErrorMessage GameLoader::loadNetworkCampaign(const char*fileName)106 ErrorMessage GameLoader::loadNetworkCampaign(const std::string& fileName) 108 107 { 109 108 ErrorMessage errorCode; 110 char*campaignName = ResourceManager::getFullName(fileName);111 if ( campaignName)109 std::string campaignName = ResourceManager::getFullName(fileName); 110 if (!campaignName.empty()) 112 111 { 113 112 this->currentCampaign = this->fileToCampaign(campaignName); 114 delete[] campaignName;115 113 } 116 114 } … … 220 218 * this will interprete the map/campaign files and recursivly load a tree of worlds/campaigns 221 219 */ 222 Campaign* GameLoader::fileToCampaign(const char*fileName)220 Campaign* GameLoader::fileToCampaign(const std::string& fileName) 223 221 { 224 222 /* do not entirely load the campaign. just the current world … … 227 225 */ 228 226 229 if( fileName == NULL)227 if( fileName.empty()) 230 228 { 231 229 PRINTF(2)("No filename specified for loading"); … … 233 231 } 234 232 235 TiXmlDocument * XMLDoc = new TiXmlDocument(fileName);233 TiXmlDocument XMLDoc(fileName); 236 234 // load the campaign document 237 if( !XMLDoc ->LoadFile())235 if( !XMLDoc.LoadFile(fileName)) 238 236 { 239 237 // report an error 240 PRINTF(1)("Could not load XML File %s: %s @ %d:%d\n", fileName, XMLDoc->ErrorDesc(), XMLDoc->ErrorRow(), XMLDoc->ErrorCol()); 241 delete XMLDoc; 238 PRINTF(1)("Could not load XML File %s: %s @ %d:%d\n", fileName.c_str(), XMLDoc.ErrorDesc(), XMLDoc.ErrorRow(), XMLDoc.ErrorCol()); 242 239 return NULL; 243 240 } 244 241 245 242 // check basic validity 246 TiXmlElement* root = XMLDoc ->RootElement();243 TiXmlElement* root = XMLDoc.RootElement(); 247 244 assert( root != NULL); 248 245 … … 251 248 // report an error 252 249 PRINTF(2)("Specified XML File is not an orxonox campaign file (Campaign element missing)\n"); 253 delete XMLDoc;254 250 return NULL; 255 251 } 256 252 257 253 // construct campaign 258 Campaign* c = new Campaign( root); 259 260 // free the XML data 261 delete XMLDoc; 262 263 return c; 254 return new Campaign( root); 264 255 } 265 256 -
branches/std/src/lib/util/loading/game_loader.h
r6981 r7203 44 44 static GameLoader* getInstance() { if(singletonRef == NULL) singletonRef = new GameLoader(); return singletonRef; } 45 45 46 ErrorMessage loadCampaign(const char*name);46 ErrorMessage loadCampaign(const std::string& name); 47 47 ErrorMessage loadDebugCampaign(Uint32 campaignID); 48 ErrorMessage loadNetworkCampaign(const char*fileName);48 ErrorMessage loadNetworkCampaign(const std::string& fileName); 49 49 50 50 ErrorMessage init(); … … 62 62 GameLoader (); 63 63 64 Campaign* fileToCampaign(const char*name);64 Campaign* fileToCampaign(const std::string& name); 65 65 66 66 -
branches/std/src/lib/util/loading/load_param.cc
r7201 r7203 28 28 * @param executor the Executor, that executes the loading procedure. 29 29 */ 30 CLoadParam::CLoadParam(const TiXmlElement* root, const char*paramName, BaseObject* object, const Executor& executor, bool inLoadCycle)31 { 32 this->paramName = paramName; 30 CLoadParam::CLoadParam(const TiXmlElement* root, const std::string& paramName, BaseObject* object, const Executor& executor, bool inLoadCycle) 31 : paramName(paramName), object(object) 32 { 33 33 this->object = object; 34 34 this->inLoadCycle = inLoadCycle; … … 37 37 if (likely(!inLoadCycle)) 38 38 this->loadElem = grabParameterElement(root, paramName); 39 //this->loadString = grabParameter(root, paramName); 40 else if (!strcmp(root->Value(), paramName)) 39 else if (paramName == root->Value()) 41 40 this->loadElem = (TiXmlElement*)root->FirstChild(); 42 41 else … … 46 45 this->executor = executor.clone(); 47 46 48 if (this->executor)49 this->executor->setName(paramName);47 //if (this->executor) 48 // this->executor->setName(paramName); 50 49 } 51 50 … … 60 59 if (likely(this->executor != NULL)) 61 60 { 61 std::string loadString; 62 62 if (this->loadElem != NULL && this->loadElem->ToText()) 63 this->loadString = this->loadElem->Value(); 64 else 65 this->loadString = NULL; 63 loadString = this->loadElem->Value(); 66 64 if (likely(this->object != NULL) && 67 ( this->loadString != NULL||65 ( !loadString.empty() || 68 66 ((this->executor->getType() & Executor_NoLoadString) == Executor_NoLoadString))) 69 67 { 70 PRINTF(4)("Loading '%s' with Parameters '%s' onto: '%s'(%s)\n", this->paramName, this->loadString, this->object->getName(), this->object->getClassName());71 this->executor->execute(this->object, this->loadString);68 PRINTF(4)("Loading '%s' with Parameters '%s' onto: '%s'(%s)\n", this->paramName, loadString, this->object->getName(), this->object->getClassName()); 69 this->executor->execute(this->object, &loadString); 72 70 } 73 71 delete this->executor; … … 99 97 * @returns a pointer to itself. 100 98 */ 101 CLoadParam& CLoadParam::describe(const char*descriptionText)102 { 103 if (LoadClassDescription::parametersDescription && this->paramDesc && !this->paramDesc->getDescription())99 CLoadParam& CLoadParam::describe(const std::string& descriptionText) 100 { 101 if (LoadClassDescription::parametersDescription && this->paramDesc && this->paramDesc->getDescription().empty()) 104 102 { 105 103 this->paramDesc->setDescription(descriptionText); … … 230 228 * @returns the Value of the parameter if found, NULL otherwise 231 229 */ 232 const char* grabParameter(const TiXmlElement* root, const char*parameterName)230 std::string grabParameter(const TiXmlElement* root, const std::string& parameterName) 233 231 { 234 232 const TiXmlElement* element; 235 233 const TiXmlNode* node; 236 234 237 if (root == NULL || parameterName == NULL)235 if (root == NULL) 238 236 return NULL; 239 assert( parameterName != NULL);240 237 241 238 element = root->FirstChildElement( parameterName); … … 256 253 * @returns the Element of the parameter if found, NULL otherwise 257 254 */ 258 const TiXmlElement* grabParameterElement(const TiXmlElement* root, const char*parameterName)255 const TiXmlElement* grabParameterElement(const TiXmlElement* root, const std::string& parameterName) 259 256 { 260 257 const TiXmlElement* element; 261 258 const TiXmlNode* node; 262 259 263 if (root == NULL || parameterName == NULL)260 if (root == NULL) 264 261 return NULL; 265 assert( parameterName != NULL);266 262 267 263 element = root->FirstChildElement( parameterName); -
branches/std/src/lib/util/loading/load_param.h
r7198 r7203 87 87 { 88 88 public: 89 CLoadParam(const TiXmlElement* root, const char*paramName, BaseObject* object, const Executor& executor, bool inLoadCycle = false);89 CLoadParam(const TiXmlElement* root, const std::string& paramName, BaseObject* object, const Executor& executor, bool inLoadCycle = false); 90 90 virtual ~CLoadParam(); 91 91 92 CLoadParam& describe(const char*descriptionText);92 CLoadParam& describe(const std::string& descriptionText); 93 93 CLoadParam& defaultValues(const MultiType& value0 = MT_NULL, const MultiType& value1 = MT_NULL, 94 94 const MultiType& value2 = MT_NULL, const MultiType& value3 = MT_NULL, 95 95 const MultiType& value4 = MT_NULL); 96 CLoadParam& attribute(const char*attributeName, const Executor& executor);96 CLoadParam& attribute(const std::string& attributeName, const Executor& executor); 97 97 98 98 … … 101 101 Executor* executor; 102 102 BaseObject* object; 103 const char*paramName;103 const std::string paramName; 104 104 105 105 LoadClassDescription* classDesc; //!< The LoadClassDescription of this CLoadParameter 106 106 LoadParamDescription* paramDesc; //!< The LoadParameterDescription of this LoadParameter 107 107 const TiXmlElement* loadElem; //!< The Element to load. 108 const char* loadString; //!< The string loaded by this LoadParam109 108 const void* pointerToParam; //!< A Pointer to a Parameter. 110 109 … … 114 113 // helper function 115 114 116 const char* grabParameter(const TiXmlElement* root, const char*parameterName);117 const TiXmlElement* grabParameterElement(const TiXmlElement* root, const char*parameterName);115 std::string grabParameter(const TiXmlElement* root, const std::string& parameterName); 116 const TiXmlElement* grabParameterElement(const TiXmlElement* root, const std::string& parameterName); 118 117 119 118 #endif /* _LOAD_PARAM_H */ -
branches/std/src/lib/util/loading/load_param_description.cc
r7130 r7203 22 22 * @param paramName the name of the parameter to load 23 23 */ 24 LoadParamDescription::LoadParamDescription(const char*paramName)24 LoadParamDescription::LoadParamDescription(const std::string& paramName) 25 25 { 26 26 this->types = NULL; 27 this->description = NULL;28 27 this->defaultValues = NULL; 29 this->paramName = new char[strlen(paramName)+1]; 30 strcpy(this->paramName, paramName); 28 this->paramName = paramName; 31 29 } 32 30 … … 46 44 delete[] this->types; 47 45 delete[] this->defaultValues; 48 delete[] this->paramName;49 delete[] this->description;50 46 } 51 47 … … 53 49 * @param descriptionText The text to set as a description for this Parameter 54 50 */ 55 void LoadParamDescription::setDescription(const char* descriptionText) 56 { 57 this->description = new char[strlen(descriptionText)+1]; 58 strcpy(this->description, descriptionText); 51 void LoadParamDescription::setDescription(const std::string& descriptionText) 52 { 53 this->description = descriptionText; 59 54 } 60 55 … … 64 59 void LoadParamDescription::print() const 65 60 { 66 PRINT(3)(" <%s>", this->paramName );61 PRINT(3)(" <%s>", this->paramName.c_str()); 67 62 for (int i = 0; i < this->paramCount; i++) 68 63 { … … 101 96 // } 102 97 } 103 PRINT(3)("</%s>", this->paramName );104 if ( this->description)105 PRINT(3)(" -- %s", this->description );98 PRINT(3)("</%s>", this->paramName.c_str()); 99 if (!this->description.empty()) 100 PRINT(3)(" -- %s", this->description.c_str()); 106 101 // default values 107 102 if (this->paramCount > 0) … … 213 208 while (it != this->paramList.end()) 214 209 { 215 if ( !strcmp((*it)->paramName, paramName))210 if ((*it)->paramName == paramName) 216 211 { 217 212 return NULL; -
branches/std/src/lib/util/loading/load_param_description.h
r7130 r7203 36 36 friend class LoadParam; 37 37 friend class LoadClassDescription; 38 39 LoadParamDescription(const char*paramName);38 public: 39 LoadParamDescription(const std::string& paramName); 40 40 ~LoadParamDescription(); 41 41 42 void setDescription(const char*descriptionText);42 void setDescription(const std::string& descriptionText); 43 43 /** @returns the descriptionString */ 44 const char*getDescription() { return this->description; };44 const std::string& getDescription() { return this->description; }; 45 45 46 46 void print() const; 47 47 48 49 char*paramName; //!< The name of the parameter.48 private: 49 std::string paramName; //!< The name of the parameter. 50 50 int paramCount; //!< The count of parameters. 51 51 int* types; //!< What kind of parameters does this function take ?? 52 char*description; //!< A longer description about this function.52 std::string description; //!< A longer description about this function. 53 53 char** defaultValues; //!< The 'Default Values'. @TODO MAKE THIS A MULTITYPE 54 54 }; … … 58 58 { 59 59 friend class CLoadParam; 60 60 public: 61 61 LoadClassDescription(const char* className); 62 62 ~LoadClassDescription(); … … 69 69 static void printAll(const char* fileName = NULL); 70 70 static std::list<const char*> searchClassWithShort(const char* classNameBegin); 71 // static const LoadParamDescription* getClass(const char* className);71 // static const LoadParamDescription* getClass(const char* className); 72 72 73 73 private: 74 74 static bool parametersDescription; //!< if parameter-description should be enabled. 75 75 static std::list<LoadClassDescription*>* classList; //!< a list, that stores all the loadable classes. (after one instance has been loaded) -
branches/std/src/lib/util/loading/resource_manager.cc
r7199 r7203 60 60 61 61 this->dataDir = new char[3]; 62 strcpy(this->dataDir, "./");62 this->dataDir = "./"; 63 63 this->tryDataDir("./data"); 64 65 this->_cwd = NULL;66 64 } 67 65 … … 80 78 PRINTF(1)("Not removed all Resources, since there are still %d resources registered\n", this->resourceList.size()); 81 79 82 // deleting the Directorie Lists83 while (!this->imageDirs.empty())84 {85 delete[] this->imageDirs.back();86 this->imageDirs.pop_back();87 }88 89 delete[] this->dataDir;90 if (this->_cwd)91 delete[] this->_cwd;92 80 ResourceManager::singletonRef = NULL; 93 81 } … … 97 85 * @param dataDir the DataDirectory. 98 86 */ 99 bool ResourceManager::setDataDir(const char*dataDir)100 { 101 char*realDir = ResourceManager::homeDirCheck(dataDir);87 bool ResourceManager::setDataDir(const std::string& dataDir) 88 { 89 std::string realDir = ResourceManager::homeDirCheck(dataDir); 102 90 if (isDir(realDir)) 103 91 { 104 delete[] this->dataDir; 105 if (dataDir[strlen(dataDir)-1] == '/' || dataDir[strlen(dataDir)-1] == '\\') 92 if (dataDir[dataDir.size()-1] == '/' || dataDir[dataDir.size()-1] == '\\') 106 93 { 107 this->dataDir = new char[strlen(realDir)+1]; 108 strcpy(this->dataDir, realDir); 94 this->dataDir = realDir; 109 95 } 110 96 else 111 97 { 112 this->dataDir = new char[strlen(realDir)+2]; 113 strcpy(this->dataDir, realDir); 114 this->dataDir[strlen(realDir)] = '/'; 115 this->dataDir[strlen(realDir)+1] = '\0'; 98 this->dataDir = realDir; 99 this->dataDir += '/'; 116 100 } 117 delete[] realDir;118 101 return true; 119 102 } 120 103 else 121 104 { 122 PRINTF(1)("%s is not a Directory, and can not be the Data Directory, leaving as %s \n", realDir, this->dataDir); 123 delete[] realDir; 105 PRINTF(1)("%s is not a Directory, and can not be the Data Directory, leaving as %s \n", realDir.c_str(), this->dataDir.c_str()); 124 106 return false; 125 107 } … … 132 114 * this is essentially the same as setDataDir, but it ommits the error-message 133 115 */ 134 bool ResourceManager::tryDataDir(const char*dataDir)135 { 136 char*realDir = ResourceManager::homeDirCheck(dataDir);116 bool ResourceManager::tryDataDir(const std::string& dataDir) 117 { 118 std::string realDir = ResourceManager::homeDirCheck(dataDir); 137 119 if (isDir(realDir)) 138 120 { 139 delete[] this->dataDir; 140 if (dataDir[strlen(dataDir)-1] == '/' || dataDir[strlen(dataDir)-1] == '\\') 121 if (dataDir[dataDir.size()-1] == '/' || dataDir[dataDir.size()-1] == '\\') 141 122 { 142 this->dataDir = new char[strlen(realDir)+1]; 143 strcpy(this->dataDir, realDir); 123 this->dataDir = realDir; 144 124 } 145 125 else 146 126 { 147 this->dataDir = new char[strlen(realDir)+2]; 148 strcpy(this->dataDir, realDir); 149 this->dataDir[strlen(realDir)] = '/'; 150 this->dataDir[strlen(realDir)+1] = '\0'; 127 this->dataDir = realDir; 128 this->dataDir += '/'; 151 129 } 152 delete[] realDir;153 130 return true; 154 131 } 155 delete[] realDir;156 132 return false; 157 133 } … … 162 138 * @param fileInside is iniside of the given directory. 163 139 */ 164 bool ResourceManager::verifyDataDir(const char*fileInside)140 bool ResourceManager::verifyDataDir(const std::string& fileInside) 165 141 { 166 142 bool retVal; 167 143 if (!isDir(this->dataDir)) 168 144 { 169 PRINTF(1)("%s is not a directory\n", this->dataDir); 170 return false; 171 } 172 173 char* testFile = new char[strlen(this->dataDir)+strlen(fileInside)+1]; 174 sprintf(testFile, "%s%s", this->dataDir, fileInside); 145 PRINTF(1)("%s is not a directory\n", this->dataDir.c_str()); 146 return false; 147 } 148 149 std::string testFile = this->dataDir + fileInside; 175 150 retVal = isFile(testFile); 176 delete[] testFile;177 151 return retVal; 178 152 } … … 185 159 false otherwise 186 160 */ 187 bool ResourceManager::addImageDir(const char* imageDir) 188 { 189 if (imageDir == NULL) 190 return false; 191 192 char* newDir; 193 if (imageDir[strlen(imageDir)-1] == '/' || imageDir[strlen(imageDir)-1] == '\\') 194 { 195 newDir = new char[strlen(imageDir)+1]; 196 strcpy(newDir, imageDir); 197 } 198 else 199 { 200 newDir = new char[strlen(imageDir)+2]; 201 strcpy(newDir, imageDir); 202 newDir[strlen(imageDir)] = '/'; 203 newDir[strlen(imageDir)+1] = '\0'; 161 bool ResourceManager::addImageDir(const std::string& imageDir) 162 { 163 std::string newDir; 164 if (imageDir[imageDir.size()-1] == '/' || imageDir[imageDir.size()-1] == '\\') 165 { 166 newDir = imageDir; 167 } 168 else 169 { 170 newDir = imageDir; 171 newDir += '/'; 204 172 } 205 173 // check if the param is a Directory … … 207 175 { 208 176 // check if the Directory has been added before 209 std::vector< char*>::const_iterator imageDir;177 std::vector<std::string>::const_iterator imageDir; 210 178 for (imageDir = this->imageDirs.begin(); imageDir != this->imageDirs.end(); imageDir++) 211 179 { 212 if ( !strcmp(*imageDir, newDir))180 if (*imageDir == newDir) 213 181 { 214 PRINTF(3)("Path %s already loaded\n", newDir); 215 delete[] newDir; 182 PRINTF(3)("Path %s already loaded\n", newDir.c_str()); 216 183 return true; 217 184 } … … 223 190 else 224 191 { 225 PRINTF(1)("%s is not a Directory, and can not be added to the Paths of Images\n", newDir); 226 delete[] newDir; 192 PRINTF(1)("%s is not a Directory, and can not be added to the Paths of Images\n", newDir.c_str()); 227 193 return false; 228 194 } … … 239 205 * @returns a pointer to a desired Resource. 240 206 */ 241 BaseObject* ResourceManager::load(const char*fileName, ResourcePriority prio,207 BaseObject* ResourceManager::load(const std::string& fileName, ResourcePriority prio, 242 208 const MultiType& param0, const MultiType& param1, const MultiType& param2) 243 209 { 244 if (fileName == NULL)245 return NULL;246 210 ResourceType tmpType; 247 211 #ifndef NO_MODEL 248 212 #define __IF_OK 249 if (!strncasecmp(fileName +(strlen(fileName)-4), ".obj", 4))213 if (!strncasecmp(fileName.c_str()+(fileName.size()-4), ".obj", 4)) 250 214 tmpType = OBJ; 251 else if (!strncmp(fileName +(strlen(fileName)-4), ".md2", 4))215 else if (!strncmp(fileName.c_str()+(fileName.size()-4), ".md2", 4)) 252 216 tmpType = MD2; 253 else if (!strcasecmp(fileName , "cube") ||254 !strcasecmp(fileName, "sphere") ||255 !strcasecmp(fileName, "plane") ||256 !strcasecmp(fileName, "cylinder") ||257 !strcasecmp(fileName, "cone"))217 else if (!strcasecmp(fileName.c_str(), "cube") || 218 !strcasecmp(fileName.c_str(), "sphere") || 219 !strcasecmp(fileName.c_str(), "plane") || 220 !strcasecmp(fileName.c_str(), "cylinder") || 221 !strcasecmp(fileName.c_str(), "cone")) 258 222 tmpType = PRIM; 259 223 #endif /* NO_MODEL */ … … 263 227 #endif 264 228 #define __IF_OK 265 if (!strncasecmp(fileName +(strlen(fileName)-4), ".wav", 4))229 if (!strncasecmp(fileName.c_str()+(fileName.size()-4), ".wav", 4)) 266 230 tmpType = WAV; 267 else if (!strncasecmp(fileName +(strlen(fileName)-4), ".mp3", 4))231 else if (!strncasecmp(fileName.c_str()+(fileName.size()-4), ".mp3", 4)) 268 232 tmpType = MP3; 269 else if (!strncasecmp(fileName +(strlen(fileName)-4), ".ogg", 4))233 else if (!strncasecmp(fileName.c_str()+(fileName.size()-4), ".ogg", 4)) 270 234 tmpType = OGG; 271 235 #endif /* NO_AUDIO */ … … 275 239 #endif 276 240 #define __IF_OK 277 if (!strncasecmp(fileName +(strlen(fileName)-4), ".ttf", 4))241 if (!strncasecmp(fileName.c_str()+(fileName.size()-4), ".ttf", 4)) 278 242 tmpType = TTF; 279 243 #endif /* NO_TEXT */ … … 283 247 #endif 284 248 #define __IF_OK 285 if (!strncasecmp(fileName +(strlen(fileName)-5), ".vert", 5))249 if (!strncasecmp(fileName.c_str()+(fileName.size()-5), ".vert", 5)) 286 250 tmpType = SHADER; 287 251 #endif /* NO_SHADERS */ … … 308 272 * during the initialisation instead of at Runtime. 309 273 */ 310 bool ResourceManager::cache(const char*fileName, ResourceType type, ResourcePriority prio,274 bool ResourceManager::cache(const std::string& fileName, ResourceType type, ResourcePriority prio, 311 275 const MultiType& param0, const MultiType& param1, const MultiType& param2) 312 276 { 313 assert(fileName != NULL);314 315 277 // searching if the resource was loaded before. 316 278 Resource* tmpResource; … … 359 321 * @returns a pointer to a desired Resource. 360 322 */ 361 BaseObject* ResourceManager::load(const char*fileName, ResourceType type, ResourcePriority prio,323 BaseObject* ResourceManager::load(const std::string& fileName, ResourceType type, ResourcePriority prio, 362 324 const MultiType& param0, const MultiType& param1, const MultiType& param2) 363 325 { 364 assert(fileName != NULL);365 366 326 // searching if the resource was loaded before. 367 327 Resource* tmpResource; … … 397 357 * @returns a pointer to a desired Resource. 398 358 */ 399 Resource* ResourceManager::loadResource(const char*fileName, ResourceType type, ResourcePriority prio,359 Resource* ResourceManager::loadResource(const std::string& fileName, ResourceType type, ResourcePriority prio, 400 360 const MultiType& param0, const MultiType& param1, const MultiType& param2) 401 361 { … … 406 366 tmpResource->prio = prio; 407 367 tmpResource->pointer = NULL; 408 tmpResource->name = new char[strlen(fileName)+1]; 409 strcpy(tmpResource->name, fileName); 368 tmpResource->name = fileName; 410 369 411 370 // creating the full name. (directoryName + FileName) 412 char*fullName = ResourceManager::getFullName(fileName);371 std::string fullName = ResourceManager::getFullName(fileName); 413 372 // Checking for the type of resource \see ResourceType 414 373 switch(type) … … 425 384 else 426 385 { 427 PRINTF(2)("File %s in %s does not exist. Loading a cube-Model instead\n", fileName , dataDir);386 PRINTF(2)("File %s in %s does not exist. Loading a cube-Model instead\n", fileName.c_str(), dataDir.c_str()); 428 387 tmpResource->pointer = ResourceManager::load("cube", PRIM, prio, tmpResource->param[0].getFloat()); 429 388 } … … 435 394 tmpResource->param[0] = 1.0f; 436 395 437 if ( !strcmp(tmpResource->name, "cube"))396 if (tmpResource->name == "cube") 438 397 tmpResource->pointer = new PrimitiveModel(PRIM_CUBE, tmpResource->param[0].getFloat()); 439 else if ( !strcmp(tmpResource->name, "sphere"))398 else if (tmpResource->name == "sphere") 440 399 tmpResource->pointer = new PrimitiveModel(PRIM_SPHERE, tmpResource->param[0].getFloat()); 441 else if ( !strcmp(tmpResource->name, "plane"))400 else if (tmpResource->name == "plane") 442 401 tmpResource->pointer = new PrimitiveModel(PRIM_PLANE, tmpResource->param[0].getFloat()); 443 else if ( !strcmp(tmpResource->name, "cylinder"))402 else if (tmpResource->name == "cylinder") 444 403 tmpResource->pointer = new PrimitiveModel(PRIM_CYLINDER, tmpResource->param[0].getFloat()); 445 else if ( !strcmp(tmpResource->name, "cone"))404 else if (tmpResource->name == "cone") 446 405 tmpResource->pointer = new PrimitiveModel(PRIM_CONE, tmpResource->param[0].getFloat()); 447 406 break; … … 468 427 tmpResource->pointer = new Font(fullName, (unsigned int) tmpResource->param[0].getInt()); 469 428 else 470 PRINTF(2)("%s does not exist in %s. Not loading Font\n", fileName , this->dataDir);429 PRINTF(2)("%s does not exist in %s. Not loading Font\n", fileName.c_str(), this->dataDir.c_str()); 471 430 break; 472 431 #endif /* NO_TEXT */ … … 494 453 else 495 454 { 496 std::vector< char*>::iterator imageDir;455 std::vector<std::string>::iterator imageDir; 497 456 for (imageDir = this->imageDirs.begin(); imageDir != this->imageDirs.end(); imageDir++) 498 457 { 499 char* imgName = new char[strlen(*imageDir)+strlen(fileName)+1]; 500 sprintf(imgName, "%s%s", *imageDir, fileName); 458 std::string imgName = *imageDir + fileName; 501 459 if(isFile(imgName)) 502 460 { 503 461 PRINTF(4)("Image %s resides to %s\n", fileName, imgName); 504 462 tmpResource->pointer = new Texture(imgName, tmpResource->param[0].getInt()); 505 delete[] imgName;506 463 break; 507 464 } 508 delete[] imgName;509 465 } 510 466 } 511 467 if(!tmpResource) 512 PRINTF(2)("!!Image %s not Found!!\n", fileName );468 PRINTF(2)("!!Image %s not Found!!\n", fileName.c_str()); 513 469 break; 514 470 #endif /* NO_TEXTURES */ … … 520 476 { 521 477 MultiType param = param0; /// HACK 522 char*secFullName = ResourceManager::getFullName(param.getCString());478 std::string secFullName = ResourceManager::getFullName(param.getCString()); 523 479 if (ResourceManager::isFile(secFullName)) 524 480 { … … 526 482 tmpResource->pointer = new Shader(fullName, secFullName); 527 483 } 528 delete[] secFullName;529 484 } 530 485 else … … 538 493 default: 539 494 tmpResource->pointer = NULL; 540 PRINTF(1)("No type found for %s.\n !!This should not happen unless the Type is not supported yet. JUST DO IT!!\n", tmpResource->name );495 PRINTF(1)("No type found for %s.\n !!This should not happen unless the Type is not supported yet. JUST DO IT!!\n", tmpResource->name.c_str()); 541 496 break; 542 497 } 543 498 if (tmpResource->pointer != NULL) 544 499 this->resourceList.push_back(tmpResource); 545 delete[] fullName;546 547 500 548 501 if (tmpResource->pointer != NULL) … … 550 503 else 551 504 { 552 PRINTF(2)("Resource %s could not be loaded\n", fileName); 553 delete[] tmpResource->name; 505 PRINTF(2)("Resource %s could not be loaded\n", fileName.c_str()); 554 506 delete tmpResource; 555 507 return NULL; … … 597 549 delete resource->pointer; 598 550 // deleting the List Entry: 599 PRINTF(4)("Resource %s safely removed.\n", resource->name); 600 delete[] resource->name; 551 PRINTF(4)("Resource %s safely removed.\n", resource->name.c_str()); 601 552 std::vector<Resource*>::iterator resourceIT = std::find(this->resourceList.begin(), this->resourceList.end(), resource); 602 553 this->resourceList.erase(resourceIT); … … 604 555 } 605 556 else 606 PRINTF(4)("Resource %s not removed, because there are still %d References to it.\n", resource->name , resource->count);607 } 608 else 609 PRINTF(4)("not deleting resource %s because DeleteLevel to high\n", resource->name );557 PRINTF(4)("Resource %s not removed, because there are still %d References to it.\n", resource->name.c_str(), resource->count); 558 } 559 else 560 PRINTF(4)("not deleting resource %s because DeleteLevel to high\n", resource->name.c_str()); 610 561 return true; 611 562 } … … 633 584 if (round == 3) 634 585 PRINTF(2)("unable to unload %s because there are still %d references to it\n", 635 this->resourceList[index]->name , this->resourceList[index]->count);586 this->resourceList[index]->name.c_str(), this->resourceList[index]->count); 636 587 removeCount++; 637 588 } … … 653 604 * @returns a Pointer to the Resource if found, NULL otherwise. 654 605 */ 655 Resource* ResourceManager::locateResourceByInfo(const char*fileName, ResourceType type,606 Resource* ResourceManager::locateResourceByInfo(const std::string& fileName, ResourceType type, 656 607 const MultiType& param0, const MultiType& param1, const MultiType& param2) const 657 608 { … … 659 610 for (resource = this->resourceList.begin(); resource != this->resourceList.end(); resource++) 660 611 { 661 if ((*resource)->type == type && !strcmp(fileName, (*resource)->name))612 if ((*resource)->type == type && fileName == (*resource)->name) 662 613 { 663 614 bool match = false; … … 743 694 } 744 695 745 char*ResourceManager::toResourcableString(unsigned int i)746 { 747 int len = strlen(ResourceManager::ResourceTypeToChar(this->resourceList[i]->type));748 len += strlen(this->resourceList[i]->name);696 std::string ResourceManager::toResourcableString(unsigned int i) 697 { 698 /* int len = strlen(ResourceManager::ResourceTypeToChar(this->resourceList[i]->type)); 699 len += this->resourceList[i]->name.size(); 749 700 if (this->resourceList[i]->param[0].getCString()) len += strlen(this->resourceList[i]->param[0].getCString()) +1; 750 701 if (this->resourceList[i]->param[1].getCString()) len += strlen(this->resourceList[i]->param[1].getCString()) +1; 751 702 if (this->resourceList[i]->param[2].getCString()) len += strlen(this->resourceList[i]->param[2].getCString()) +1; 752 703 len += 10; 753 char*tmp = new char[len];704 std::string tmp = new char[len]; 754 705 tmp[0] = '\0'; 755 strcat( 706 strcat(tmp, ResourceManager::ResourceTypeToChar(this->resourceList[i]->type)); 756 707 strcat(tmp,","); 757 708 strcat (tmp, this->resourceList[i]->name); … … 771 722 strcat( tmp, this->resourceList[i]->param[2].getCString()); 772 723 } 773 return tmp; 724 return tmp;*/ 774 725 } 775 726 … … 778 729 * @param resourceableString the String to cache the resource from. 779 730 */ 780 bool ResourceManager::fromResourceableString(const char*resourceableString)781 { 782 SubString splits(resourceableString, ',');731 bool ResourceManager::fromResourceableString(const std::string& resourceableString) 732 { 733 /* SubString splits(resourceableString, ','); 783 734 splits.debug(); 784 735 if (splits.getCount() == 2) … … 793 744 else if (splits.getCount() == 5) 794 745 return this->cache(splits[1], ResourceManager::stringToResourceType(splits[0]), 795 RP_LEVEL, splits[2], splits[3], splits[4]); 746 RP_LEVEL, splits[2], splits[3], splits[4]);*/ 796 747 } 797 748 … … 802 753 * @returns true if it is a directory/symlink false otherwise 803 754 */ 804 bool ResourceManager::isDir(const char* directoryName) 805 { 806 if (directoryName == NULL) 807 return false; 808 809 char* tmpDirName = NULL; 755 bool ResourceManager::isDir(const std::string& directoryName) 756 { 757 std::string tmpDirName = directoryName; 810 758 struct stat status; 811 759 812 760 // checking for the termination of the string given. If there is a "/" at the end cut it away 813 if (directoryName[strlen(directoryName)-1] == '/' || 814 directoryName[strlen(directoryName)-1] == '\\') 815 { 816 tmpDirName = new char[strlen(directoryName)]; 817 strncpy(tmpDirName, directoryName, strlen(directoryName)-1); 818 tmpDirName[strlen(directoryName)-1] = '\0'; 819 } 820 else 821 { 822 tmpDirName = new char[strlen(directoryName)+1]; 823 strcpy(tmpDirName, directoryName); 824 } 825 826 if(!stat(tmpDirName, &status)) 761 if (directoryName[directoryName.size()-1] == '/' || 762 directoryName[directoryName.size()-1] == '\\') 763 { 764 tmpDirName.erase(tmpDirName.size()-1); 765 } 766 767 if(!stat(tmpDirName.c_str(), &status)) 827 768 { 828 769 if (status.st_mode & (S_IFDIR … … 832 773 )) 833 774 { 834 delete[] tmpDirName;835 775 return true; 836 776 } 837 777 else 838 {839 delete[] tmpDirName;840 778 return false; 841 } 842 } 843 else 844 { 845 delete[] tmpDirName; 846 return false; 847 } 779 } 780 else 781 return false; 848 782 } 849 783 … … 853 787 * @returns true if it is a regular file/symlink, false otherwise 854 788 */ 855 bool ResourceManager::isFile(const char* fileName) 856 { 857 if (fileName == NULL) 858 return false; 859 char* tmpFileName = ResourceManager::homeDirCheck(fileName); 789 bool ResourceManager::isFile(const std::string& fileName) 790 { 791 std::string tmpFileName = ResourceManager::homeDirCheck(fileName); 860 792 // actually checks the File 861 793 struct stat status; 862 if (!stat(tmpFileName , &status))794 if (!stat(tmpFileName.c_str(), &status)) 863 795 { 864 796 if (status.st_mode & (S_IFREG … … 868 800 )) 869 801 { 870 delete[] tmpFileName;871 802 return true; 872 803 } 873 804 else 874 {875 delete[] tmpFileName;876 805 return false; 877 } 878 } 879 else 880 { 881 delete[] tmpFileName; 882 return false; 883 } 806 } 807 else 808 return false; 884 809 } 885 810 … … 888 813 * @param fileName The file to touch 889 814 */ 890 bool ResourceManager::touchFile(const char*fileName)891 { 892 char*tmpName = ResourceManager::homeDirCheck(fileName);893 if (tmpName == NULL)815 bool ResourceManager::touchFile(const std::string& fileName) 816 { 817 std::string tmpName = ResourceManager::homeDirCheck(fileName); 818 if (tmpName.empty()) 894 819 return false; 895 820 FILE* stream; 896 if( (stream = fopen (tmpName, "w")) == NULL) 897 { 898 PRINTF(1)("could not open %s fro writing\n", fileName); 899 delete[] tmpName; 821 if( (stream = fopen (tmpName.c_str(), "w")) == NULL) 822 { 823 PRINTF(1)("could not open %s fro writing\n", fileName.c_str()); 900 824 return false; 901 825 } 902 826 fclose(stream); 903 904 delete[] tmpName;905 827 } 906 828 … … 909 831 * @param fileName the File to delete 910 832 */ 911 bool ResourceManager::deleteFile(const char* fileName) 912 { 913 if (fileName == NULL) 914 return false; 915 char* tmpName = ResourceManager::homeDirCheck(fileName); 916 unlink(tmpName); 917 delete[] tmpName; 833 bool ResourceManager::deleteFile(const std::string& fileName) 834 { 835 std::string tmpName = ResourceManager::homeDirCheck(fileName); 836 unlink(tmpName.c_str()); 918 837 } 919 838 … … 923 842 * IMPORTANT: this has to be deleted from the outside 924 843 */ 925 char* ResourceManager::homeDirCheck(const char* name) 926 { 927 if (name == NULL) 928 return NULL; 929 char* retName; 930 if (!strncmp(name, "~/", 2)) 844 std::string ResourceManager::homeDirCheck(const std::string& name) 845 { 846 std::string retName; 847 if (!strncmp(name.c_str(), "~/", 2)) 931 848 { 932 849 char tmpFileName[500]; … … 936 853 strcpy(tmpFileName, getenv("HOME")); 937 854 #endif 938 retName = new char[strlen(tmpFileName)+strlen(name)]; 939 sprintf(retName, "%s%s", tmpFileName, name+1); 940 } 941 else 942 { 943 retName = new char[strlen(name)+1]; 944 strcpy(retName, name); 855 retName = tmpFileName + name; 856 } 857 else 858 { 859 retName = name; 945 860 } 946 861 return retName; … … 949 864 /** 950 865 * @param name the relative name of the File/Directory. 951 * @returns a new char* with the name in abs-dir-format 952 */ 953 char* ResourceManager::getAbsDir(const char* name) 954 { 955 if (name == NULL) 956 return NULL; 957 char* retName; 958 if (strncmp(name, "/", 1)) 959 { 960 if (*name == '.' && *(name+1) != '.') 961 name++; 962 const char* absDir = ResourceManager::cwd(); 963 retName = new char[strlen(absDir)+strlen(name)+1]; 964 sprintf(retName, "%s%s", absDir, name); 965 } 966 else 967 { 968 retName = new char[strlen(name)+1]; 969 strcpy(retName, name); 866 * @returns a new std::string with the name in abs-dir-format 867 */ 868 std::string ResourceManager::getAbsDir(const std::string& name) 869 { 870 if (name.empty()) 871 return ""; 872 std::string retName = name; 873 if (strncmp(name.c_str(), "/", 1)) 874 { 875 if (name[0] == '.' && name[1] != '.') 876 retName.erase(0); 877 const std::string& absDir = ResourceManager::cwd(); 878 retName = absDir + retName; 970 879 } 971 880 return retName; … … 978 887 * !!IMPORTANT: this has to be deleted from the outside!! 979 888 */ 980 char* ResourceManager::getFullName(const char*fileName)981 { 982 if (fileName == NULL || ResourceManager::getInstance()->getDataDir() == NULL)889 std::string ResourceManager::getFullName(const std::string& fileName) 890 { 891 if (fileName.empty() || ResourceManager::getInstance()->getDataDir().empty()) 983 892 return NULL; 984 893 985 char* retName = new char[strlen(ResourceManager::getInstance()->getDataDir()) 986 + strlen(fileName) + 1]; 987 sprintf(retName, "%s%s", ResourceManager::getInstance()->getDataDir(), fileName); 894 std::string retName = ResourceManager::getInstance()->getDataDir() +fileName; 988 895 if (ResourceManager::isFile(retName) || ResourceManager::isDir(retName)) 989 896 return retName; 990 897 else 991 {992 delete[] retName;993 898 return NULL; 994 }995 899 } 996 900 … … 1005 909 * @returns the Current Woring Directory 1006 910 */ 1007 const char*ResourceManager::cwd()1008 { 1009 if (ResourceManager::getInstance()->_cwd == NULL)911 const std::string& ResourceManager::cwd() 912 { 913 if (ResourceManager::getInstance()->_cwd.empty()) 1010 914 { 1011 915 char cwd[1024]; 1012 916 char* errorCode = getcwd(cwd, 1024); 1013 917 if (errorCode == 0) 1014 return NULL; 1015 1016 ResourceManager::getInstance()->_cwd = new char[strlen(cwd)+1]; 1017 strcpy(ResourceManager::getInstance()->_cwd, cwd); 918 return ResourceManager::getInstance()->_cwd; 919 920 ResourceManager::getInstance()->_cwd = cwd; 1018 921 } 1019 922 return ResourceManager::getInstance()->_cwd; … … 1026 929 * @returns true if the file exists, false otherwise 1027 930 */ 1028 bool ResourceManager::isInDataDir(const char*fileName)1029 { 1030 if (fileName == NULL || ResourceManager::getInstance()->getDataDir() == NULL)931 bool ResourceManager::isInDataDir(const std::string& fileName) 932 { 933 if (fileName.empty() || ResourceManager::getInstance()->getDataDir().empty()) 1031 934 return false; 1032 935 1033 936 bool retVal = false; 1034 char* checkFile = new char[strlen(ResourceManager::getInstance()->getDataDir()) 1035 + strlen(fileName) + 1]; 1036 sprintf(checkFile, "%s%s", ResourceManager::getInstance()->getDataDir(), fileName); 937 std::string checkFile = ResourceManager::getInstance()->getDataDir() + fileName; 1037 938 1038 939 if (ResourceManager::isFile(checkFile) || ResourceManager::isDir(checkFile)) … … 1040 941 else 1041 942 retVal = false; 1042 delete[] checkFile;1043 943 return retVal; 1044 944 } … … 1055 955 // if it is not initialized 1056 956 PRINT(0)(" Reference is: %p\n", ResourceManager::singletonRef); 1057 PRINT(0)(" Data-Directory is: %s\n", this->dataDir );957 PRINT(0)(" Data-Directory is: %s\n", this->dataDir.c_str()); 1058 958 PRINT(0)(" List of Image-Directories: "); 1059 std::vector< char*>::const_iterator imageDir;959 std::vector<std::string>::const_iterator imageDir; 1060 960 for (imageDir = this->imageDirs.begin(); imageDir != this->imageDirs.end(); imageDir++) 1061 PRINT(0)("%s ", (*imageDir) );961 PRINT(0)("%s ", (*imageDir).c_str()); 1062 962 PRINT(0)("\n"); 1063 963 … … 1068 968 { 1069 969 PRINT(0)("-----------------------------------------\n"); 1070 PRINT(0)("Name: %s; References: %d; Type: %s ", (*resource)->name , (*resource)->count, ResourceManager::ResourceTypeToChar((*resource)->type));970 PRINT(0)("Name: %s; References: %d; Type: %s ", (*resource)->name.c_str(), (*resource)->count, ResourceManager::ResourceTypeToChar((*resource)->type)); 1071 971 1072 972 PRINT(0)("gets deleted at "); -
branches/std/src/lib/util/loading/resource_manager.h
r7196 r7203 71 71 unsigned int count; //!< How many times this Resource has been loaded. 72 72 73 char*name; //!< Name of the Resource.73 std::string name; //!< Name of the Resource. 74 74 ResourceType type; //!< ResourceType of this Resource. 75 75 ResourcePriority prio; //!< The Priority of this resource. (This will only be increased) … … 96 96 inline static ResourceManager* getInstance() { if (!singletonRef) singletonRef = new ResourceManager(); return singletonRef; }; 97 97 98 bool setDataDir(const char*dataDir);98 bool setDataDir(const std::string& dataDir); 99 99 /** @returns the Name of the data directory */ 100 inline const char*getDataDir() const { return this->dataDir; };100 inline const std::string& getDataDir() const { return this->dataDir; }; 101 101 102 102 103 bool tryDataDir(const char*dataDir);104 bool verifyDataDir(const char*fileInside);105 bool addImageDir(const char*imageDir);103 bool tryDataDir(const std::string& dataDir); 104 bool verifyDataDir(const std::string& fileInside); 105 bool addImageDir(const std::string& imageDir); 106 106 107 bool cache(const char*fileName, ResourceType type, ResourcePriority prio = RP_NO,107 bool cache(const std::string& fileName, ResourceType type, ResourcePriority prio = RP_NO, 108 108 const MultiType& param0 = MultiType(), const MultiType& param1 = MultiType(), const MultiType& param2 = MultiType()); 109 109 BaseObject* copy(BaseObject* resourcePointer); 110 110 111 BaseObject* load(const char*fileName, ResourcePriority prio = RP_NO,111 BaseObject* load(const std::string& fileName, ResourcePriority prio = RP_NO, 112 112 const MultiType& param0 = MultiType(), const MultiType& param1 = MultiType(), const MultiType& param2 = MultiType()); 113 BaseObject* load(const char*fileName, ResourceType type, ResourcePriority prio = RP_NO,113 BaseObject* load(const std::string& fileName, ResourceType type, ResourcePriority prio = RP_NO, 114 114 const MultiType& param0 = MultiType(), const MultiType& param1 = MultiType(), const MultiType& param2 = MultiType()); 115 115 bool unload(BaseObject* pointer, ResourcePriority prio = RP_NO); … … 117 117 bool unloadAllByPriority(ResourcePriority prio); 118 118 119 Resource* locateResourceByInfo(const char*fileName, ResourceType type,119 Resource* locateResourceByInfo(const std::string& fileName, ResourceType type, 120 120 const MultiType& param0 = MultiType(), const MultiType& param1 = MultiType(), const MultiType& param2 = MultiType()) const; 121 121 Resource* locateResourceByPointer(const void* pointer) const; 122 122 123 char*toResourcableString(unsigned int i);124 bool fromResourceableString(const char*resourceableString);123 std::string toResourcableString(unsigned int i); 124 bool fromResourceableString(const std::string& resourceableString); 125 125 /** @returns the Count of Resources the ResourceManager handles */ 126 126 unsigned int resourceCount() const { return this->resourceList.size(); } … … 130 130 131 131 // utility functions for handling files in and around the data-directory 132 static bool isDir(const char*directory);133 static bool isFile(const char*fileName);134 static bool touchFile(const char*fileName);135 static bool deleteFile(const char*fileName);136 static char* homeDirCheck(const char*fileName);137 static char* getFullName(const char*fileName);138 static bool isInDataDir(const char*fileName);139 static char* getAbsDir(const char*fileName);140 static const char*cwd();132 static bool isDir(const std::string& directory); 133 static bool isFile(const std::string& fileName); 134 static bool touchFile(const std::string& fileName); 135 static bool deleteFile(const std::string& fileName); 136 static std::string homeDirCheck(const std::string& fileName); 137 static std::string getFullName(const std::string& fileName); 138 static bool isInDataDir(const std::string& fileName); 139 static std::string getAbsDir(const std::string& fileName); 140 static const std::string& cwd(); 141 141 142 142 static const char* ResourceTypeToChar(ResourceType type); … … 145 145 private: 146 146 ResourceManager(); 147 Resource* loadResource(const char*fileName, ResourceType type, ResourcePriority prio,147 Resource* loadResource(const std::string& fileName, ResourceType type, ResourcePriority prio, 148 148 const MultiType& param0, const MultiType& param1, const MultiType& param2); 149 149 150 150 private: 151 static ResourceManager* singletonRef; //!< singleton Reference151 static ResourceManager* singletonRef; //!< singleton Reference 152 152 153 char*_cwd; //!< The currend Working directory.154 char*dataDir; //!< The Data Directory, where all relevant Data is stored.155 std::vector< char*>imageDirs; //!< A list of directories in which images are stored.153 std::string _cwd; //!< The currend Working directory. 154 std::string dataDir; //!< The Data Directory, where all relevant Data is stored. 155 std::vector<std::string> imageDirs; //!< A list of directories in which images are stored. 156 156 157 std::vector<Resource*> resourceList; //!< The List of Resources, that has already been loaded.157 std::vector<Resource*> resourceList; //!< The List of Resources, that has already been loaded. 158 158 159 static const char* resourceNames[RESOURCE_TYPE_SIZE];159 static const char* resourceNames[RESOURCE_TYPE_SIZE]; 160 160 }; 161 161
Note: See TracChangeset
for help on using the changeset viewer.