xue@11: /* xue@11: Harmonic sinusoidal modelling and tools xue@11: xue@11: C++ code package for harmonic sinusoidal modelling and relevant signal processing. xue@11: Centre for Digital Music, Queen Mary, University of London. xue@11: This file copyright 2011 Wen Xue. xue@11: xue@11: This program is free software; you can redistribute it and/or xue@11: modify it under the terms of the GNU General Public License as xue@11: published by the Free Software Foundation; either version 2 of the xue@11: License, or (at your option) any later version. xue@11: */ xue@1: #ifndef TSTREAM_H xue@1: #define TSTREAM_H xue@1: Chris@5: /** Chris@5: \file tstream.h - a stream I/O interface without implementation. xue@1: xue@1: This file is included to allow compiling relevent functions that uses Borland VCL's TStream class for xue@1: abstract I/O purposes. xue@1: */ xue@1: xue@7: #include xue@7: xue@1: enum TSeekOrigin {soFromBeginning, soFromCurrent, soFromEnd}; xue@1: class TStream xue@1: { xue@1: public: xue@7: TStream(){}; xue@7: ~TStream(){}; xue@7: virtual int Read(void*, int){return 0;} xue@7: virtual int Write(void*, int){return 0;} xue@7: virtual int Seek(int, TSeekOrigin){return Position;} xue@1: int Position; xue@1: }; xue@1: xue@7: enum FileMode {fmRead, fmWrite, fmReadWrite}; xue@7: class TFileStream : public TStream xue@7: { xue@7: public: xue@7: FILE* fp; xue@7: TFileStream(char* filename, FileMode mode) : TStream() xue@7: { xue@7: if (mode==fmWrite) fp=fopen(filename, "wb"); xue@7: else if (mode==fmReadWrite) fp=fopen(filename, "rb+"); xue@7: else fp=fopen(filename, "rb"); xue@7: } xue@7: ~TFileStream() xue@7: { xue@7: fclose(fp); xue@7: } xue@7: virtual int Read(void* buffer, int size) xue@7: { xue@7: int result=fread(buffer, 1, size, fp); xue@7: Position=ftell(fp); xue@7: return result; xue@7: } xue@7: virtual int Write(void* buffer, int size) xue@7: { xue@7: int result=fwrite(buffer, 1, size, fp); xue@7: Position=ftell(fp); xue@7: return result; xue@7: } xue@7: virtual int Seek(int Offset, TSeekOrigin Origin) xue@7: { xue@7: fseek(fp, Offset, Origin); xue@7: Position=ftell(fp); xue@7: return Position; xue@7: } xue@7: }; xue@7: xue@1: #endif // TSTREAM_H