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 #ifndef CPL_VSI_VIRTUAL_H_INCLUDED
00031 #define CPL_VSI_VIRTUAL_H_INCLUDED
00032
00033 #include "cpl_vsi.h"
00034
00035 #if defined(WIN32CE)
00036 # include "cpl_wince.h"
00037 # include <wce_errno.h>
00038 # pragma warning(disable:4786)
00039 #endif
00040
00041 #include <map>
00042 #include <vector>
00043 #include <string>
00044
00045
00046
00047
00048
00049 class VSIVirtualHandle {
00050 public:
00051 virtual int Seek( vsi_l_offset nOffset, int nWhence ) = 0;
00052 virtual vsi_l_offset Tell() = 0;
00053 virtual size_t Read( void *pBuffer, size_t nSize, size_t nMemb ) = 0;
00054 virtual size_t Write( const void *pBuffer, size_t nSize,size_t nMemb)=0;
00055 virtual int Eof() = 0;
00056 virtual int Flush() {return 0;}
00057 virtual int Close() = 0;
00058 virtual ~VSIVirtualHandle() { }
00059 };
00060
00061
00062
00063
00064
00065 class VSIFilesystemHandler {
00066
00067 public:
00068 virtual VSIVirtualHandle *Open( const char *pszFilename,
00069 const char *pszAccess) = 0;
00070 virtual int Stat( const char *pszFilename, VSIStatBufL *pStatBuf) = 0;
00071 virtual int Unlink( const char *pszFilename )
00072 { errno=ENOENT; return -1; }
00073 virtual int Mkdir( const char *pszDirname, long nMode )
00074 { errno=ENOENT; return -1; }
00075 virtual int Rmdir( const char *pszDirname )
00076 { errno=ENOENT; return -1; }
00077 virtual char **ReadDir( const char *pszDirname )
00078 { return NULL; }
00079 virtual ~VSIFilesystemHandler() {}
00080 virtual int Rename( const char *oldpath, const char *newpath )
00081 { errno=ENOENT; return -1; }
00082 };
00083
00084
00085
00086
00087
00088 class VSIFileManager
00089 {
00090 private:
00091 VSIFilesystemHandler *poDefaultHandler;
00092 std::map<std::string,VSIFilesystemHandler *> oHandlers;
00093
00094 VSIFileManager();
00095
00096 static VSIFileManager *Get();
00097
00098 public:
00099 ~VSIFileManager();
00100
00101 static VSIFilesystemHandler *GetHandler( const char * );
00102 static void InstallHandler( std::string osPrefix,
00103 VSIFilesystemHandler * );
00104 static void RemoveHandler( std::string osPrefix );
00105 };
00106
00107 #endif