xue@1
|
1 #ifndef TSTREAM_H
|
xue@1
|
2 #define TSTREAM_H
|
xue@1
|
3
|
Chris@5
|
4 /**
|
Chris@5
|
5 \file tstream.h - a stream I/O interface without implementation.
|
xue@1
|
6
|
xue@1
|
7 This file is included to allow compiling relevent functions that uses Borland VCL's TStream class for
|
xue@1
|
8 abstract I/O purposes.
|
xue@1
|
9 */
|
xue@1
|
10
|
xue@7
|
11 #include <stdio.h>
|
xue@7
|
12
|
xue@1
|
13 enum TSeekOrigin {soFromBeginning, soFromCurrent, soFromEnd};
|
xue@1
|
14 class TStream
|
xue@1
|
15 {
|
xue@1
|
16 public:
|
xue@7
|
17 TStream(){};
|
xue@7
|
18 ~TStream(){};
|
xue@7
|
19 virtual int Read(void*, int){return 0;}
|
xue@7
|
20 virtual int Write(void*, int){return 0;}
|
xue@7
|
21 virtual int Seek(int, TSeekOrigin){return Position;}
|
xue@1
|
22 int Position;
|
xue@1
|
23 };
|
xue@1
|
24
|
xue@7
|
25 enum FileMode {fmRead, fmWrite, fmReadWrite};
|
xue@7
|
26 class TFileStream : public TStream
|
xue@7
|
27 {
|
xue@7
|
28 public:
|
xue@7
|
29 FILE* fp;
|
xue@7
|
30 TFileStream(char* filename, FileMode mode) : TStream()
|
xue@7
|
31 {
|
xue@7
|
32 if (mode==fmWrite) fp=fopen(filename, "wb");
|
xue@7
|
33 else if (mode==fmReadWrite) fp=fopen(filename, "rb+");
|
xue@7
|
34 else fp=fopen(filename, "rb");
|
xue@7
|
35 }
|
xue@7
|
36 ~TFileStream()
|
xue@7
|
37 {
|
xue@7
|
38 fclose(fp);
|
xue@7
|
39 }
|
xue@7
|
40 virtual int Read(void* buffer, int size)
|
xue@7
|
41 {
|
xue@7
|
42 int result=fread(buffer, 1, size, fp);
|
xue@7
|
43 Position=ftell(fp);
|
xue@7
|
44 return result;
|
xue@7
|
45 }
|
xue@7
|
46 virtual int Write(void* buffer, int size)
|
xue@7
|
47 {
|
xue@7
|
48 int result=fwrite(buffer, 1, size, fp);
|
xue@7
|
49 Position=ftell(fp);
|
xue@7
|
50 return result;
|
xue@7
|
51 }
|
xue@7
|
52 virtual int Seek(int Offset, TSeekOrigin Origin)
|
xue@7
|
53 {
|
xue@7
|
54 fseek(fp, Offset, Origin);
|
xue@7
|
55 Position=ftell(fp);
|
xue@7
|
56 return Position;
|
xue@7
|
57 }
|
xue@7
|
58 };
|
xue@7
|
59
|
xue@1
|
60 #endif // TSTREAM_H
|