summaryrefslogtreecommitdiff
path: root/common/file.h
blob: 5e2678fa4d41494ace73ba5e041155035f865757 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
//
//	file.h
////////////////////////////////////////////////////

#ifndef _FILE_H_
#define _FILE_H_

#include <stdio.h>

class File
{
 public:
  // Constructors
  File();
  virtual ~File();

  // Implementation
 public:
  virtual unsigned long GetPosition() const = 0;
  virtual unsigned long Seek(long lOff, int nFrom) = 0;
  virtual void SetLength(unsigned long nNewLen) = 0;
  virtual unsigned long GetLength() const = 0;

  virtual char* ReadString(char* pBuf, unsigned long nMax)=0;
  virtual unsigned long Read(void* pBuf, unsigned long nCount)=0;
  virtual unsigned long Write(const void* pBuf, unsigned long nCount)=0;
  virtual int GetChar()=0;
  virtual int PutChar(int c)=0;

  unsigned long ReadByte (void* pBuf, unsigned long nCount);
  unsigned long ReadShort (void* pBuf, unsigned long nCount);
  unsigned long ReadLong (void* pBuf, unsigned long nCount);
  unsigned long ReadFloat (void* pBuf, unsigned long nCount);
  unsigned long ReadDouble (void* pBuf, unsigned long nCount);
  unsigned long WriteByte (const void* pBuf, unsigned long nCount);
  unsigned long WriteShort (const void* pBuf, unsigned long nCount);
  unsigned long WriteLong (const void* pBuf, unsigned long nCount);
  unsigned long WriteFloat (const void* pBuf, unsigned long nCount);
  unsigned long WriteDouble (const void* pBuf, unsigned long nCount);

  virtual void Abort()=0;
  virtual void Flush()=0;
  virtual void Close()=0;
};

class FileMem : public File
{
public:
// Constructors
	FileMem();
	~FileMem();

// Implementation
protected:
	// MemFile specific:
	unsigned long m_nGrowBytes;
	unsigned long m_nPosition;
	unsigned long m_nBufferSize;
	unsigned long m_nFileSize;
	unsigned char* m_pBuffer;
	bool m_bAutoDelete;
	void GrowFile(unsigned long nNewLen);

public:
	unsigned long GetPosition() const;
	unsigned long Seek(long lOff, int nFrom);
	void SetLength(unsigned long nNewLen);
	unsigned long GetLength() const;

	char* ReadString(char* pBuf, unsigned long nMax);
	unsigned long Read(void* pBuf, unsigned long nCount);
	unsigned long Write(const void* pBuf, unsigned long nCount);
	int GetChar();
	int PutChar(int c);

	void Abort();
	void Flush();
	void Close();
	bool Open(const char *filename, const char *mode);
};

class FileDisk : public File
{
public:
// Constructors
	FileDisk();
	~FileDisk();

// Implementation
protected:
	// DiscFile specific:
	FILE* m_hFile;
	bool m_bCloseOnDelete;

public:
	unsigned long GetPosition() const;
	unsigned long Seek(long lOff, int nFrom);
	void SetLength(unsigned long nNewLen);
	unsigned long GetLength() const;

	char* ReadString(char* pBuf, unsigned long nMax);
	unsigned long Read(void* pBuf, unsigned long nCount);
	unsigned long Write(const void* pBuf, unsigned long nCount);
	int GetChar();
	int PutChar(int c);

	void Abort();
	void Flush();
	void Close();
	bool Open(const char *filename, const char *mode);
};











#endif // _FILE_H_