# Home    # nevrax.com   
Nevrax
Nevrax.org
#News
#Mailing-list
#Documentation
#CVS
#Bugs
#License
Docs
 
Documentation  
Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages   Search  

async_file_manager.h

Go to the documentation of this file.
00001 
00007 /* Copyright, 2000 Nevrax Ltd.
00008  *
00009  * This file is part of NEVRAX NEL.
00010  * NEVRAX NEL is free software; you can redistribute it and/or modify
00011  * it under the terms of the GNU General Public License as published by
00012  * the Free Software Foundation; either version 2, or (at your option)
00013  * any later version.
00014 
00015  * NEVRAX NEL is distributed in the hope that it will be useful, but
00016  * WITHOUT ANY WARRANTY; without even the implied warranty of
00017  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
00018  * General Public License for more details.
00019 
00020  * You should have received a copy of the GNU General Public License
00021  * along with NEVRAX NEL; see the file COPYING. If not, write to the
00022  * Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
00023  * MA 02111-1307, USA.
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 (); // Must be called instead of constructing the object
00047         static void terminate (); // End all tasks and terminate if any tasks
00048 
00049         // Do not use these methods with the bigfile manager
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); // Signal a end of loading for a group of "mesh or file" added
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 (); // Singleton mode -> access it with the getInstance function
00081 
00082         static CAsyncFileManager *_Singleton;
00083 
00084         // All the tasks
00085         // -------------
00086         
00087         // Load a file
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         // Load multiple files
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         // Signal
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 } // NLMISC
00121 
00122 
00123 #endif // NL_ASYNC_FILE_MANAGER_H
00124 
00125 /* End of async_file_manager.h */