Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __CS_MEMFILE_H__
00020 #define __CS_MEMFILE_H__
00021
00026 #include "csextern.h"
00027 #include "csutil/scf_implementation.h"
00028 #include "iutil/vfs.h"
00029
00034 class CS_CRYSTALSPACE_EXPORT csMemFile :
00035 public scfImplementation1<csMemFile, iFile>
00036 {
00037 public:
00039 enum Disposition
00040 {
00042 DISPOSITION_DELETE,
00044 DISPOSITION_PLATFORM_FREE,
00046 DISPOSITION_IGNORE,
00048 DISPOSITION_CS_FREE,
00049 #ifndef CS_NO_MALLOC_OVERRIDE
00050
00054 DISPOSITION_FREE = DISPOSITION_CS_FREE
00055 #else
00056 DISPOSITION_FREE = DISPOSITION_PLATFORM_FREE
00057 #endif
00058 };
00059
00060 public:
00062 csMemFile();
00064 csMemFile(const char*, size_t);
00070 csMemFile(char*, size_t, Disposition = DISPOSITION_DELETE);
00080 csMemFile(iDataBuffer* buf, bool readOnly);
00082 virtual ~csMemFile();
00083
00085 virtual const char* GetName();
00086 virtual size_t GetSize();
00087 virtual int GetStatus();
00088
00089 virtual size_t Read(char* Data, size_t DataSize);
00090 virtual size_t Write(const char* Data, size_t DataSize);
00091 virtual void Flush();
00092 virtual bool AtEOF();
00093 virtual size_t GetPos();
00094 virtual bool SetPos(size_t newpos);
00095
00096 virtual csPtr<iDataBuffer> GetAllData (bool nullterm = false);
00097 csPtr<iDataBuffer> GetAllData (CS::Memory::iAllocator*);
00098 csPtr<iFile> GetPartialView (size_t offset, size_t size = (size_t)~0);
00103 virtual const char* GetData() const;
00104 size_t GetDataSize () const { return size; }
00105
00107 void Empty();
00108 protected:
00109 csRef<iDataBuffer> buffer;
00110 int status;
00111 size_t size;
00112 size_t cursor;
00113 bool copyOnWrite;
00114 bool readOnly;
00115 };
00116
00117 #endif // __CS_MEMFILE_H__