Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef ResourceDatabase_INCLUDE_ONCE
00033 #define ResourceDatabase_INCLUDE_ONCE
00034
00035 #include <vlCore/Object.hpp>
00036 #include <vlCore/String.hpp>
00037 #include <vector>
00038 #include <algorithm>
00039
00040 namespace vl
00041 {
00042 class VirtualFile;
00043
00048 class VLCORE_EXPORT ResourceDatabase: public Object
00049 {
00050 VL_INSTRUMENT_CLASS(vl::ResourceDatabase, Object)
00051
00052 public:
00053 ResourceDatabase()
00054 {
00055 VL_DEBUG_SET_OBJECT_NAME()
00056 }
00057
00058 const std::vector< ref<Object> >& resources() const { return mResources; }
00059
00060 std::vector< ref<Object> >& resources() { return mResources; }
00061
00063 template<class T>
00064 T* next(int& cur_pos) const
00065 {
00066 for(unsigned i=cur_pos; i<mResources.size(); ++i)
00067 {
00068 ref<T> r = cast<T>(mResources[i].get());
00069 if (r)
00070 {
00071 cur_pos = i+1;
00072 return r.get();
00073 }
00074 }
00075 return NULL;
00076 }
00077
00079 template<class T>
00080 void get( std::vector< ref<T> >& resources, bool clear_vector=true )
00081 {
00082 if (clear_vector)
00083 resources.clear();
00084
00085 for( unsigned i=0; i<mResources.size(); ++i )
00086 {
00087 ref<T> r = cast<T>(mResources[i].get());
00088 if (r)
00089 resources.push_back(r);
00090 }
00091 }
00092
00094 template<class T>
00095 void extract( std::vector< ref<T> >& resources, bool clear_vector=true )
00096 {
00097 if (clear_vector)
00098 resources.clear();
00099
00100 size_t start = resources.size();
00101
00102 for( unsigned i=mResources.size(); i--; )
00103 {
00104 ref<T> r = cast<T>(mResources[i].get());
00105 if (r)
00106 {
00107 resources.push_back(r);
00108 mResources.erase(mResources.begin()+i);
00109 }
00110 }
00111
00112 std::reverse(resources.begin()+start, resources.end());
00113 }
00114
00116 template<class T>
00117 size_t count() const
00118 {
00119 size_t count=0;
00120 for(unsigned i=0; i<mResources.size(); ++i)
00121 {
00122 const T* r = cast_const<T>(mResources[i].get());
00123 if (r)
00124 ++count;
00125 }
00126 return count;
00127 }
00128
00130 template<class T>
00131 const T* get(int j) const
00132 {
00133 int count=0;
00134 for(unsigned i=0; i<mResources.size(); ++i)
00135 {
00136 const T* r = cast_const<T>(mResources[i].get());
00137 if (r)
00138 {
00139 if (count == j)
00140 return r;
00141 else
00142 ++count;
00143 }
00144 }
00145 return NULL;
00146 }
00147
00149 template<class T>
00150 T* get(int j)
00151 {
00152 int count=0;
00153 for(unsigned i=0; i<mResources.size(); ++i)
00154 {
00155 T* r = cast<T>(mResources[i].get());
00156 if (r)
00157 {
00158 if (count == j)
00159 return r;
00160 else
00161 ++count;
00162 }
00163 }
00164 return NULL;
00165 }
00166
00167 protected:
00168 std::vector< ref<Object> > mResources;
00169 };
00170
00172 VLCORE_EXPORT bool canLoad(const String& path);
00173
00175 VLCORE_EXPORT bool canWrite(const String& path);
00176
00178 VLCORE_EXPORT bool canLoad(VirtualFile* file);
00179
00181 VLCORE_EXPORT bool canWrite(VirtualFile* file);
00182
00184 VLCORE_EXPORT ref<ResourceDatabase> loadResource(const String& path, bool quick=true);
00185
00187 VLCORE_EXPORT ref<ResourceDatabase> loadResource(VirtualFile* file, bool quick=true);
00188
00190 VLCORE_EXPORT bool writeResource(const String& path, ResourceDatabase* resource);
00191
00193 VLCORE_EXPORT bool writeResource(VirtualFile* file, ResourceDatabase* resource);
00194 }
00195
00196 #endif