00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _RESOURCE_
00019 #define _RESOURCE_
00020
00021 #include <iostream>
00022 #include <locale>
00023 #include <sstream>
00024 #include <string>
00025
00026 #define MAX_RESOURCE_FILE_NAME_LENGTH 256
00027 #define MAX_RESOURCE_NAME_LENGTH 768
00028
00029 class ResourceCache;
00030 class ResourceHandle;
00031
00032 class Resource
00033 {
00034 friend class ResourceCache;
00035 protected:
00036 virtual ResourceHandle* CreateResourceHandle(const void* pBuffer, const unsigned int nBufferSize, ResourceCache* const pResourceCache);
00037 public:
00038 std::string _resourceName;
00039 std::string _resourceFile;
00040
00041 Resource() { }
00042
00043 virtual ~Resource() { }
00044
00045 Resource(const std::string& resourceName, const std::string& resourceFile)
00046 :_resourceName(resourceName), _resourceFile(resourceFile)
00047 {
00048 for(unsigned i = 0; i < resourceName.size(); ++i)
00049 {
00050 if(resourceName[i] == '/')
00051 _resourceName[i] = '\\';
00052 else
00053 _resourceName[i] = std::tolower(resourceName[i], std::locale(""));
00054 }
00055
00056 for(unsigned i = 0; i < resourceFile.size(); ++i)
00057 _resourceFile[i] = std::tolower(resourceFile[i], std::locale(""));
00058 }
00059
00060 const std::string GetFullResourceName() const
00061 {
00062 std::stringstream sstream;
00063
00064 sstream << _resourceFile << "\\" << _resourceName;
00065 std::string fullResourceName;
00066 sstream >> fullResourceName;
00067
00068 return fullResourceName;
00069 }
00070 };
00071
00072 inline std::istream & operator>>(std::istream& is, Resource & r)
00073 {
00074 is >> r._resourceName >> r._resourceFile;
00075
00076 return is;
00077 }
00078
00079 inline std::ostream & operator<<(std::ostream& os, const Resource& r)
00080 {
00081 os << r._resourceName << " " << r._resourceFile << " ";
00082
00083 return os;
00084 }
00085
00086
00087 #endif