xue@11
|
1 /*
|
xue@11
|
2 Harmonic sinusoidal modelling and tools
|
xue@11
|
3
|
xue@11
|
4 C++ code package for harmonic sinusoidal modelling and relevant signal processing.
|
xue@11
|
5 Centre for Digital Music, Queen Mary, University of London.
|
xue@11
|
6 This file copyright 2011 Wen Xue.
|
xue@11
|
7
|
xue@11
|
8 This program is free software; you can redistribute it and/or
|
xue@11
|
9 modify it under the terms of the GNU General Public License as
|
xue@11
|
10 published by the Free Software Foundation; either version 2 of the
|
xue@11
|
11 License, or (at your option) any later version.
|
xue@11
|
12 */
|
xue@1
|
13 #ifndef TSTREAM_H
|
xue@1
|
14 #define TSTREAM_H
|
xue@1
|
15
|
Chris@5
|
16 /**
|
Chris@5
|
17 \file tstream.h - a stream I/O interface without implementation.
|
xue@1
|
18
|
xue@1
|
19 This file is included to allow compiling relevent functions that uses Borland VCL's TStream class for
|
xue@1
|
20 abstract I/O purposes.
|
xue@1
|
21 */
|
xue@1
|
22
|
xue@7
|
23 #include <stdio.h>
|
xue@7
|
24
|
xue@1
|
25 enum TSeekOrigin {soFromBeginning, soFromCurrent, soFromEnd};
|
xue@1
|
26 class TStream
|
xue@1
|
27 {
|
xue@1
|
28 public:
|
xue@7
|
29 TStream(){};
|
xue@7
|
30 ~TStream(){};
|
xue@7
|
31 virtual int Read(void*, int){return 0;}
|
xue@7
|
32 virtual int Write(void*, int){return 0;}
|
xue@7
|
33 virtual int Seek(int, TSeekOrigin){return Position;}
|
xue@1
|
34 int Position;
|
xue@1
|
35 };
|
xue@1
|
36
|
xue@7
|
37 enum FileMode {fmRead, fmWrite, fmReadWrite};
|
xue@7
|
38 class TFileStream : public TStream
|
xue@7
|
39 {
|
xue@7
|
40 public:
|
xue@7
|
41 FILE* fp;
|
xue@7
|
42 TFileStream(char* filename, FileMode mode) : TStream()
|
xue@7
|
43 {
|
xue@7
|
44 if (mode==fmWrite) fp=fopen(filename, "wb");
|
xue@7
|
45 else if (mode==fmReadWrite) fp=fopen(filename, "rb+");
|
xue@7
|
46 else fp=fopen(filename, "rb");
|
xue@7
|
47 }
|
xue@7
|
48 ~TFileStream()
|
xue@7
|
49 {
|
xue@7
|
50 fclose(fp);
|
xue@7
|
51 }
|
xue@7
|
52 virtual int Read(void* buffer, int size)
|
xue@7
|
53 {
|
xue@7
|
54 int result=fread(buffer, 1, size, fp);
|
xue@7
|
55 Position=ftell(fp);
|
xue@7
|
56 return result;
|
xue@7
|
57 }
|
xue@7
|
58 virtual int Write(void* buffer, int size)
|
xue@7
|
59 {
|
xue@7
|
60 int result=fwrite(buffer, 1, size, fp);
|
xue@7
|
61 Position=ftell(fp);
|
xue@7
|
62 return result;
|
xue@7
|
63 }
|
xue@7
|
64 virtual int Seek(int Offset, TSeekOrigin Origin)
|
xue@7
|
65 {
|
xue@7
|
66 fseek(fp, Offset, Origin);
|
xue@7
|
67 Position=ftell(fp);
|
xue@7
|
68 return Position;
|
xue@7
|
69 }
|
xue@7
|
70 };
|
xue@7
|
71
|
xue@1
|
72 #endif // TSTREAM_H
|