diff tstream.h @ 7:9b1c0825cc77

TFileStream; redefining some function arguments
author Wen X <xue.wen@elec.qmul.ac.uk>
date Mon, 11 Oct 2010 17:54:32 +0100
parents 5f3c32dc6e17
children 977f541d6683
line wrap: on
line diff
--- a/tstream.h	Wed Oct 06 15:36:50 2010 +0100
+++ b/tstream.h	Mon Oct 11 17:54:32 2010 +0100
@@ -8,16 +8,53 @@
   abstract I/O purposes.
 */
 
+#include <stdio.h>
+
 enum TSeekOrigin {soFromBeginning, soFromCurrent, soFromEnd};
 class TStream
 {
 public:
-  TStream();
-  ~TStream();
-  int Read(void*, int){return 0;}
-  int Write(void*, int){return 0;}
-  int Seek(int, TSeekOrigin){return Position;}
+  TStream(){};
+  ~TStream(){};
+  virtual int Read(void*, int){return 0;}
+  virtual int Write(void*, int){return 0;}
+  virtual int Seek(int, TSeekOrigin){return Position;}
   int Position;
 };
 
+enum FileMode {fmRead, fmWrite, fmReadWrite};
+class TFileStream : public TStream
+{
+public:
+  FILE* fp;
+  TFileStream(char* filename, FileMode mode) : TStream()
+  {
+    if (mode==fmWrite) fp=fopen(filename, "wb");
+    else if (mode==fmReadWrite) fp=fopen(filename, "rb+");
+    else fp=fopen(filename, "rb");
+  }
+  ~TFileStream()
+  {
+    fclose(fp);
+  }
+  virtual int Read(void* buffer, int size)
+  {
+    int result=fread(buffer, 1, size, fp);
+    Position=ftell(fp);
+    return result;
+  }
+  virtual int Write(void* buffer, int size)
+  {
+    int result=fwrite(buffer, 1, size, fp);
+    Position=ftell(fp);
+    return result;
+  }
+  virtual int Seek(int Offset, TSeekOrigin Origin)
+  {
+    fseek(fp, Offset, Origin);
+    Position=ftell(fp);
+    return Position;
+  }
+};
+
 #endif // TSTREAM_H