00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef FIFE_VFS_VFS_H
00023 #define FIFE_VFS_VFS_H
00024
00025
00026 #include <set>
00027 #include <string>
00028 #include <vector>
00029
00030
00031 #include <boost/shared_ptr.hpp>
00032
00033
00034
00035
00036
00037
00038 namespace FIFE {
00039
00040 class RawData;
00041
00042 class VFSSourceProvider;
00043 class VFSSource;
00044
00056 class VFS {
00057 public:
00061 VFS();
00062
00065 virtual ~VFS();
00066
00067 void cleanup();
00068
00075 void addProvider(VFSSourceProvider* provider);
00076
00083 VFSSource* createSource(const std::string& path) const;
00084
00088 void addNewSource(const std::string& path);
00089
00090
00092 void addSource(VFSSource* source);
00093
00095 void removeSource(VFSSource* source);
00096
00102 bool exists(const std::string& file) const;
00103
00109 bool isDirectory(const std::string& path) const;
00110
00117 RawData* open(const std::string& path);
00118
00124 std::set<std::string> listFiles(const std::string& path) const;
00125
00135 std::set<std::string> listFiles(const std::string& path, const std::string& filterregex) const;
00136
00142 std::set<std::string> listDirectories(const std::string& path) const;
00143
00150 std::set<std::string> listDirectories(const std::string& path, const std::string& filterregex) const;
00151
00152 private:
00153 typedef std::vector<VFSSourceProvider*> type_providers;
00154 type_providers m_providers;
00155
00156 typedef std::vector<VFSSource*> type_sources;
00157 type_sources m_sources;
00158
00159 typedef std::set<std::string> type_usedfiles;
00160 mutable type_usedfiles m_usedfiles;
00161
00162 std::set<std::string> filterList(const std::set<std::string>& list, const std::string& fregex) const;
00163 VFSSource* getSourceForFile(const std::string& file) const;
00164 };
00165
00166 }
00167
00168 #endif