Changeset 7203 in orxonox.OLD for branches/std/src/lib/util/loading/resource_manager.cc
- Timestamp:
- Mar 9, 2006, 5:28:10 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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 ");
Note: See TracChangeset
for help on using the changeset viewer.