mirror of
https://github.com/isledecomp/isle.git
synced 2026-01-20 23:01:16 +00:00
* Add MxFile and it's implementations, MxSystemFile and MxMemoryFile. The names are chosen by me, we don't know their original naming. * These expose a Read/Write/Seek/Tell interface for reading and writing data, either from a file on disk or memory buffer. * 100% match all functions.
70 lines
1.3 KiB
C++
70 lines
1.3 KiB
C++
#ifndef MXFILE_H
|
|
#define MXFILE_H
|
|
|
|
#include "decomp.h"
|
|
#include "mxtypes.h"
|
|
|
|
#include <iosfwd>
|
|
|
|
#define MXFILE_MODE_READ 1
|
|
#define MXFILE_MODE_WRITE 2
|
|
|
|
class MxFile
|
|
{
|
|
public:
|
|
MxFile() : m_mode(0) {}
|
|
inline virtual ~MxFile() {};
|
|
|
|
virtual MxResult Read(char* buffer, MxU32 size) = 0;
|
|
virtual MxResult Write(char* buffer, MxU32 size) = 0;
|
|
virtual MxResult Tell(MxU32* offset) = 0;
|
|
virtual MxResult Seek(MxU32 offset) = 0;
|
|
|
|
virtual MxBool IsWriteMode();
|
|
virtual MxBool IsReadMode();
|
|
|
|
enum OpenFlags
|
|
{
|
|
ReadBit = 1,
|
|
WriteBit = 2,
|
|
BinaryBit = 4,
|
|
};
|
|
|
|
protected:
|
|
MxU8 m_mode;
|
|
};
|
|
|
|
class MxSystemFile : public MxFile
|
|
{
|
|
public:
|
|
MxSystemFile();
|
|
virtual ~MxSystemFile();
|
|
|
|
MxResult Read(char* buffer, MxU32 size) override;
|
|
MxResult Write(char* buffer, MxU32 size) override;
|
|
MxResult Tell(MxU32* offset) override;
|
|
MxResult Seek(MxU32 offset) override;
|
|
|
|
MxResult Open(const char* filename, OpenFlags mode);
|
|
|
|
private:
|
|
FILE *m_hFile;
|
|
};
|
|
|
|
class MxMemoryFile : public MxFile
|
|
{
|
|
public:
|
|
MxMemoryFile(char* buffer);
|
|
~MxMemoryFile() {}
|
|
|
|
MxResult Read(char* buffer, MxU32 size) override;
|
|
MxResult Write(char* buffer, MxU32 size) override;
|
|
MxResult Tell(MxU32* offset) override;
|
|
MxResult Seek(MxU32 offset) override;
|
|
|
|
private:
|
|
char *m_buffer;
|
|
MxU32 m_offset;
|
|
};
|
|
|
|
#endif // MXFILE_H
|