34 #ifndef CPL_VSI_VIRTUAL_H_INCLUDED
35 #define CPL_VSI_VIRTUAL_H_INCLUDED
38 #include "cpl_vsi_error.h"
40 #include "cpl_multiproc.h"
47 #ifdef GetDiskFreeSpace
48 #undef GetDiskFreeSpace
58 virtual int Seek(
vsi_l_offset nOffset,
int nWhence ) = 0;
60 virtual size_t Read(
void *pBuffer,
size_t nSize,
size_t nCount ) = 0;
61 virtual int ReadMultiRange(
int nRanges,
void ** ppData,
63 const size_t* panSizes );
64 virtual size_t Write(
const void *pBuffer,
size_t nSize,
size_t nCount)=0;
65 virtual int Eof() = 0;
66 virtual int Flush() {
return 0;}
67 virtual int Close() = 0;
70 virtual void *GetNativeFileDescriptor() {
return NULL; }
83 class CPL_DLL VSIFilesystemHandler {
87 virtual ~VSIFilesystemHandler() {}
90 const char *pszAccess );
93 const char *pszAccess,
95 virtual int Stat(
const char *pszFilename,
VSIStatBufL *pStatBuf,
int nFlags) = 0;
96 virtual int Unlink(
const char *pszFilename )
97 { (void) pszFilename; errno=ENOENT;
return -1; }
98 virtual int Mkdir(
const char *pszDirname,
long nMode )
99 {(void)pszDirname; (void)nMode; errno=ENOENT;
return -1;}
100 virtual int Rmdir(
const char *pszDirname )
101 { (void) pszDirname; errno=ENOENT;
return -1; }
102 virtual char **ReadDir(
const char *pszDirname )
103 { (void) pszDirname;
return NULL; }
104 virtual char **ReadDirEx(
const char *pszDirname,
int )
105 {
return ReadDir(pszDirname); }
106 virtual int Rename(
const char *oldpath,
const char *newpath )
107 { (void) oldpath; (void)newpath; errno=ENOENT;
return -1; }
108 virtual int IsCaseSensitive(
const char* pszFilename )
109 { (void) pszFilename;
return TRUE; }
110 virtual GIntBig GetDiskFreeSpace(
const char* ) {
return -1; }
111 virtual int SupportsSparseFiles(
const char* ) {
return FALSE; }
120 class CPL_DLL VSIFileManager
123 VSIFilesystemHandler *poDefaultHandler;
124 std::map<std::string, VSIFilesystemHandler *> oHandlers;
128 static VSIFileManager *Get();
133 static VSIFilesystemHandler *GetHandler(
const char * );
134 static void InstallHandler(
const std::string& osPrefix,
135 VSIFilesystemHandler * );
149 class VSIArchiveEntryFileOffset
152 virtual ~VSIArchiveEntryFileOffset();
159 VSIArchiveEntryFileOffset* file_pos;
164 class VSIArchiveContent
170 VSIArchiveEntry* entries;
172 VSIArchiveContent() : mTime(0), nFileSize(0), nEntries(0), entries(NULL) {}
173 ~VSIArchiveContent();
176 class VSIArchiveReader
179 virtual ~VSIArchiveReader();
181 virtual int GotoFirstFile() = 0;
182 virtual int GotoNextFile() = 0;
183 virtual VSIArchiveEntryFileOffset* GetFileOffset() = 0;
186 virtual GIntBig GetModifiedTime() = 0;
187 virtual int GotoFileOffset(VSIArchiveEntryFileOffset* pOffset) = 0;
190 class VSIArchiveFilesystemHandler :
public VSIFilesystemHandler
197 std::map<CPLString,VSIArchiveContent*> oFileList;
199 virtual const char* GetPrefix() = 0;
200 virtual std::vector<CPLString> GetExtensions() = 0;
201 virtual VSIArchiveReader* CreateReader(
const char* pszArchiveFileName) = 0;
204 VSIArchiveFilesystemHandler();
205 virtual ~VSIArchiveFilesystemHandler();
208 virtual int Unlink(
const char *pszFilename )
CPL_OVERRIDE;
209 virtual int Rename(
const char *oldpath,
const char *newpath )
CPL_OVERRIDE;
210 virtual int Mkdir(
const char *pszDirname,
long nMode )
CPL_OVERRIDE;
211 virtual int Rmdir(
const char *pszDirname )
CPL_OVERRIDE;
212 virtual char **ReadDirEx(
const char *pszDirname,
int nMaxFiles )
CPL_OVERRIDE;
214 virtual const VSIArchiveContent* GetContentOfArchive(
const char* archiveFilename, VSIArchiveReader* poReader = NULL);
215 virtual char* SplitFilename(
const char *pszFilename,
CPLString &osFileInArchive,
int bCheckMainFileExists);
216 virtual VSIArchiveReader* OpenArchiveFile(
const char* archiveFilename,
const char* fileInArchiveName);
217 virtual int FindFileInArchive(
const char* archiveFilename,
const char* fileInArchiveName,
const VSIArchiveEntry** archiveEntry);
224 const GByte* pabyBeginningContent,
GIntBig CPLGetUsablePhysicalRAM(void)
Definition: cpl_vsisimple.cpp:1423
unsigned char GByte
Definition: cpl_port.h:207
GByte * VSIGetMemFileBuffer(const char *pszFilename, vsi_l_offset *pnDataLength, int bUnlinkAndSeize)
Fetch buffer underlying memory file.
Definition: cpl_vsi_mem.cpp:992
virtual int Truncate(vsi_l_offset nNewSize)
Truncate/expand the file to the specified size.
void * CPLCalloc(size_t, size_t)
Definition: cpl_conv.cpp:128
VSILFILE * VSIFileFromMemBuffer(const char *pszFilename, GByte *pabyData, vsi_l_offset nDataLength, int bTakeOwnership)
Create memory "file" from a buffer.
Definition: cpl_vsi_mem.cpp:933
void * VSIRealloc(void *, size_t)
Definition: cpl_vsisimple.cpp:671
GIntBig CPLAtoGIntBig(const char *pszString)
Definition: cpl_conv.cpp:953
VSIRangeStatus
Definition: cpl_vsi.h:173
virtual int Close()=0
Close file.
Convenient string class based on std::string.
Definition: cpl_string.h:338
#define CPL_OVERRIDE
Definition: cpl_port.h:1055
void * CPLRealloc(void *, size_t)
Definition: cpl_conv.cpp:215
virtual vsi_l_offset Tell()=0
Tell current file offset.
@ VSI_RANGE_STATUS_UNKNOWN
Definition: cpl_vsi.h:175
const char & back() const
Definition: cpl_string.h:385
#define CPLE_OutOfMemory
Definition: cpl_error.h:102
virtual size_t Read(void *pBuffer, size_t nSize, size_t nCount)=0
Read bytes from file.
#define CPL_FRMT_GUIB
Definition: cpl_port.h:328
unsigned long long GUIntBig
Definition: cpl_port.h:253
void CPLDebug(const char *, const char *,...)
Definition: cpl_error.cpp:492
virtual size_t Write(const void *pBuffer, size_t nSize, size_t nCount)=0
Write bytes to file.
Definition: cpl_multiproc.h:139
void CPLError(CPLErr eErrClass, CPLErrorNum err_no, const char *fmt,...)
Definition: cpl_error.cpp:215
void VSIInstallMemFileHandler(void)
Install "memory" file system handler.
Definition: cpl_vsi_mem.cpp:903
GUIntBig vsi_l_offset
Definition: cpl_vsi.h:138
#define CPLE_NotSupported
Definition: cpl_error.h:110
virtual int Eof()=0
Test for end of file.
#define CPL_FINAL
Definition: cpl_port.h:1078
long long GIntBig
Definition: cpl_port.h:250
#define CPL_UNUSED
Definition: cpl_port.h:1008
struct stat64 VSIStatBufL
Definition: cpl_vsi.h:190
#define EQUALN(a, b, n)
Definition: cpl_port.h:620
Definition: cpl_vsi_virtual.h:56
char * CPLStrdup(const char *)
Definition: cpl_conv.cpp:284
#define GUINTBIG_MAX
Definition: cpl_port.h:260
#define CPLFree
Definition: cpl_conv.h:81
FILE VSILFILE
Definition: cpl_vsi.h:154
virtual int Seek(vsi_l_offset nOffset, int nWhence)=0
Seek to requested offset.
#define CPLE_AppDefined
Definition: cpl_error.h:100
Generated for GDAL by
1.8.17.