diff --git a/source/shared_lib/include/graphics/FileReader.h b/source/shared_lib/include/graphics/FileReader.h index dcbb9dfa6..9f832a01d 100644 --- a/source/shared_lib/include/graphics/FileReader.h +++ b/source/shared_lib/include/graphics/FileReader.h @@ -20,6 +20,7 @@ #include #include #include +#include #include "leak_dumper.h" using std::map; @@ -42,12 +43,14 @@ namespace Shared{ template class FileReader { public: - string const * extensions; + //string const * extensions; + std::vector extensions; /**Creates a filereader being able to possibly load files * from the specified extension **/ - FileReader(string const * extensions); + //FileReader(string const * extensions); + FileReader(std::vector extensions); /**Creates a low-priority filereader **/ @@ -234,16 +237,20 @@ T* FileReader::readPath(const string& filepath, T* object) { } template -FileReader::FileReader(string const * extensions): extensions(extensions) { +FileReader::FileReader(std::vector extensions): extensions(extensions) { getFileReaders().push_back(this); - string const * nextExtension = extensions; - while (((*nextExtension) != "")) { - vector const* >* curPossibleReaders = (getFileReadersMap())[*nextExtension]; + //string const * nextExtension = extensions; + std::vector nextExtension = extensions; + //while (((*nextExtension) != "")) { + for(int i = 0; i < nextExtension.size(); ++i) { + //vector const* >* curPossibleReaders = (getFileReadersMap())[*nextExtension]; + vector const* >* curPossibleReaders = (getFileReadersMap())[nextExtension[i]]; if (curPossibleReaders == NULL) { - (getFileReadersMap())[*nextExtension] = (curPossibleReaders = new vector const *>()); + //(getFileReadersMap())[*nextExtension] = (curPossibleReaders = new vector const *>()); + (getFileReadersMap())[nextExtension[i]] = (curPossibleReaders = new vector const *>()); } curPossibleReaders->push_back(this); - ++nextExtension; + //++nextExtension; } } @@ -254,12 +261,15 @@ FileReader::FileReader(string const * extensions): extensions(extensions) { template bool FileReader::canRead(const string& filepath) const { const string& realExtension = extractExtension(filepath); - const string* haveExtension = extensions; - while (*haveExtension != "") { - if (realExtension == *haveExtension) { + //const string* haveExtension = extensions; + std::vector haveExtension = extensions; + //while (*haveExtension != "") { + for(int i = 0; i < haveExtension.size(); ++i) { + //if (realExtension == *haveExtension) { + if (realExtension == haveExtension[i]) { return true; } - ++haveExtension; + //++haveExtension; } return false; } diff --git a/source/shared_lib/sources/graphics/BMPReader.cpp b/source/shared_lib/sources/graphics/BMPReader.cpp index 47a04a2ce..b2fbe81cf 100644 --- a/source/shared_lib/sources/graphics/BMPReader.cpp +++ b/source/shared_lib/sources/graphics/BMPReader.cpp @@ -52,8 +52,15 @@ struct BitmapInfoHeader{ #pragma pack(pop) /**Returns a string containing the extensions we want, intitialisation is guaranteed*/ -static inline const string* getExtensionsBmp() { - static const string extensions[] = {"bmp", ""}; +//static inline const string* getExtensionsBmp() { +static inline std::vector getExtensionsBmp() { + //static const string extensions[] = {"bmp", ""}; + static std::vector extensions; + + if(extensions.size() == 0) { + extensions.push_back("bmp"); + } + return extensions; } diff --git a/source/shared_lib/sources/graphics/JPGReader.cpp b/source/shared_lib/sources/graphics/JPGReader.cpp index 55fc5eed6..a940b7f8e 100644 --- a/source/shared_lib/sources/graphics/JPGReader.cpp +++ b/source/shared_lib/sources/graphics/JPGReader.cpp @@ -56,8 +56,15 @@ static void term_source (j_decompress_ptr cinfo) { /**Return an array containing the used extensions, * initialized*/ -static inline const string* getExtensions() { - static const string extensions[] = {"jpg", "jpeg", ""}; +//static inline const string* getExtensions() { + //static const string extensions[] = {"jpg", "jpeg", ""}; +static inline std::vector getExtensions() { + static std::vector extensions; + if(extensions.size() == 0) { + extensions.push_back("jpg"); + extensions.push_back("jpeg"); + } + return extensions; } diff --git a/source/shared_lib/sources/graphics/PNGReader.cpp b/source/shared_lib/sources/graphics/PNGReader.cpp index bb4ca5b30..d62d7f4ca 100644 --- a/source/shared_lib/sources/graphics/PNGReader.cpp +++ b/source/shared_lib/sources/graphics/PNGReader.cpp @@ -44,8 +44,13 @@ static void user_write_data(png_structp png_ptr, png_bytep data, png_size_t leng static void user_flush_data(png_structp png_ptr) {} /**Get Extension array, initialised*/ -static inline const string* getExtensionsPng() { - static const string extensions[] = {"png", ""}; +//static inline const string* getExtensionsPng() { +static inline std::vector getExtensionsPng() { + //static const string extensions[] = {"png", ""}; + static std::vector extensions; + if(extensions.size() == 0) { + extensions.push_back("png"); + } return extensions; } diff --git a/source/shared_lib/sources/graphics/TGAReader.cpp b/source/shared_lib/sources/graphics/TGAReader.cpp index 19ed1eeb9..98eeaf1e0 100644 --- a/source/shared_lib/sources/graphics/TGAReader.cpp +++ b/source/shared_lib/sources/graphics/TGAReader.cpp @@ -52,8 +52,14 @@ static const int tgaUncompressedBw= 3; // ===================================================== /**Get Extension array, initialised*/ -static inline const string* getExtensionStrings() { - static const string extensions[] = {"tga", ""}; +//static inline const string* getExtensionStrings() { +static inline std::vector getExtensionStrings() { + //static const string extensions[] = {"tga", ""}; + static std::vector extensions; + if(extensions.size() == 0) { + extensions.push_back("tga"); + } + return extensions; }