00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef _FU_FILE_MANAGER_H_
00016 #define _FU_FILE_MANAGER_H_
00017
00018 #ifndef _FU_URI_H_
00019 #include "FUtils/FUUri.h"
00020 #endif //_FU_URI_H_
00021
00022 #ifndef _FM_ARRAY_H_
00023 #include "FMath/FMArray.h"
00024 #endif //_FM_ARRAY_H_
00025
00026 class FUFile;
00027
00031 typedef IFunctor1<const FUUri&, fstring> SchemeLoadCallback;
00032
00036 typedef IFunctor1<const FUUri&, bool> SchemeExistsCallback;
00037
00043 typedef IFunctor2<const fstring&, fstring&, bool> SchemePreProcessCallback;
00044
00047 typedef IFunctor2<const fstring&, size_t, void> SchemeOnCompleteCallback;
00048
00052 typedef IFunctor3<const FUUri&, SchemeOnCompleteCallback*, size_t, void> SchemeRequestFileCallback;
00053
00058 struct FCOLLADA_EXPORT SchemeCallbacks
00059 {
00060 SchemeLoadCallback* load;
00061 SchemeExistsCallback* exists;
00062 fm::vector<SchemePreProcessCallback*> openers;
00063 SchemeRequestFileCallback* request;
00064
00066 SchemeCallbacks();
00068 SchemeCallbacks(const SchemeCallbacks& copy);
00070 ~SchemeCallbacks();
00071 };
00072
00075 FCOLLADA_EXPORT SchemeCallbacks* NewSchemeCallbacks();
00076
00080 class FCOLLADA_EXPORT FUFileManager
00081 {
00082 private:
00083 typedef fm::map<FUUri::Scheme, SchemeCallbacks*> SchemeCallbackMap;
00084
00085 FUUriList pathStack;
00086 bool forceAbsolute;
00087
00088 SchemeCallbackMap schemeCallbackMap;
00089 public:
00093 FUFileManager();
00094
00096 ~FUFileManager();
00097
00101 inline const FUUri& GetCurrentUri() const { return pathStack.back(); }
00102
00107 void PushRootPath(const fstring& path);
00108
00113 void PushRootFile(const fstring& filename);
00114
00116 void PopRootPath();
00117 void PopRootFile();
00125 FUFile* OpenFile(const fstring& filename, bool write=false, SchemeOnCompleteCallback* onComplete=NULL, size_t userData = 0);
00126
00132 static bool MakeDirectory(const fstring& directory);
00133
00137 bool FileExists(const fstring& filename);
00138
00142 static fstring StripFileFromPath(const fstring& filename);
00143
00147 static fstring GetFileExtension(const fstring& filename);
00148
00152 static fstring ExtractNetworkHostname(fstring& filename);
00153
00157 void SetForceAbsoluteFlag(bool _forceAbsolute) { forceAbsolute = _forceAbsolute; }
00158
00162 fstring CleanUri(const FUUri& uri);
00163
00166 static fstring GetApplicationFolderName();
00167
00170 static fstring GetModuleFolderName();
00171
00177 static void GetFolderFromPath(const fstring& folder, fstring& path);
00178
00185 void SetSchemeCallbacks(FUUri::Scheme scheme, SchemeCallbacks* callbacks);
00186
00190 void RemoveSchemeCallbacks(FUUri::Scheme scheme);
00191
00193 void RemoveAllSchemeCallbacks();
00194
00197 void CloneSchemeCallbacks(const FUFileManager* srcFileManager);
00198 };
00199
00200 #endif // _FU_FILE_MANAGER_H_
00201