47 lines
919 B
C
47 lines
919 B
C
|
#ifndef MEMORYFILE_H
|
||
|
#define MEMORYFILE_H
|
||
|
|
||
|
#define DEF_MEMORYFILEALLOC 512
|
||
|
|
||
|
|
||
|
|
||
|
// memory based file access/buffer
|
||
|
class CMemoryFile : public CBaseFile
|
||
|
{
|
||
|
public:
|
||
|
CMemoryFile();
|
||
|
virtual ~CMemoryFile();
|
||
|
int Open(void *buf, size_t size, unsigned int mode);
|
||
|
int Close();
|
||
|
void Free();
|
||
|
size_t Read(void *buf, size_t size);
|
||
|
size_t Write(void *buf, size_t size);
|
||
|
long Seek(long pos, int mode);
|
||
|
long GetSize();
|
||
|
long GetPosition();
|
||
|
uint8_t *GetBuffer();
|
||
|
|
||
|
protected:
|
||
|
// memory type
|
||
|
enum {
|
||
|
mtAlloc,
|
||
|
mtUser,
|
||
|
mtLast
|
||
|
};
|
||
|
|
||
|
void Clear(int clbuf=1);
|
||
|
void AllocBuffer(size_t maxsize);
|
||
|
void FreeBuffer();
|
||
|
|
||
|
protected:
|
||
|
int filemt; // file memory type
|
||
|
uint8_t *filebuf[mtLast]; // file buffer
|
||
|
size_t filesize[mtLast]; // buffer size
|
||
|
size_t filecount; // valid data count in buffer
|
||
|
size_t filepos; // file position in buffer
|
||
|
};
|
||
|
|
||
|
typedef CMemoryFile *PCMEMORYFILE;
|
||
|
|
||
|
#endif
|