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