00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef NL_ASYNC_FILE_MANAGER_H
00026 #define NL_ASYNC_FILE_MANAGER_H
00027
00028 #include "nel/misc/types_nl.h"
00029 #include "nel/misc/task_manager.h"
00030
00031
00032 namespace NLMISC
00033 {
00034
00041 class CAsyncFileManager : public CTaskManager
00042 {
00043
00044 public:
00045
00046 static CAsyncFileManager &getInstance ();
00047 static void terminate ();
00048
00049
00050 void loadFile (const std::string &fileName, uint8 **pPtr);
00051 void loadFiles (const std::vector<std::string> &vFileNames, const std::vector<uint8**> &vPtrs);
00052
00053
00054 void signal (bool *pSgn);
00055 void cancelSignal (bool *pSgn);
00056
00065 class ICancelCallback
00066 {
00067 public:
00068 virtual bool callback(const IRunnable *prunnable) const =0;
00069 };
00070
00072 void addLoadTask(IRunnable *ploadTask);
00076 bool cancelLoadTask(const ICancelCallback &cancelCallBack);
00077
00078 private:
00079
00080 CAsyncFileManager ();
00081
00082 static CAsyncFileManager *_Singleton;
00083
00084
00085
00086
00087
00088 class CFileLoad : public IRunnable
00089 {
00090 std::string _FileName;
00091 uint8 **_ppFile;
00092 public:
00093 CFileLoad (const std::string& sFileName, uint8 **ppFile);
00094 void run (void);
00095 };
00096
00097
00098 class CMultipleFileLoad : public IRunnable
00099 {
00100 std::vector<std::string> _FileNames;
00101 std::vector<uint8**> _Ptrs;
00102 public:
00103 CMultipleFileLoad (const std::vector<std::string> &vFileNames, const std::vector<uint8**> &vPtrs);
00104 void run (void);
00105 };
00106
00107
00108 class CSignal : public IRunnable
00109 {
00110 public:
00111 bool *Sgn;
00112 public:
00113 CSignal (bool *pSgn);
00114 void run (void);
00115 };
00116
00117 };
00118
00119
00120 }
00121
00122
00123 #endif // NL_ASYNC_FILE_MANAGER_H
00124
00125