00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00028
00029 #ifndef PGF_STREAM_H
00030 #define PGF_STREAM_H
00031
00032 #include "PGFtypes.h"
00033 #include <new>
00034
00039 class CPGFStream {
00040 public:
00043 CPGFStream() {}
00044
00047 virtual ~CPGFStream() {}
00048
00053 virtual void Write(int *count, void *buffer)=0;
00054
00059 virtual void Read(int *count, void *buffer)=0;
00060
00065 virtual void SetPos(short posMode, INT64 posOff)=0;
00066
00070 virtual UINT64 GetPos() const=0;
00071
00075 virtual bool IsValid() const=0;
00076 };
00077
00082 class CPGFFileStream : public CPGFStream {
00083 protected:
00084 HANDLE m_hFile;
00085
00086 public:
00087 CPGFFileStream() : m_hFile(0) {}
00090 CPGFFileStream(HANDLE hFile) : m_hFile(hFile) {}
00092 HANDLE GetHandle() { return m_hFile; }
00093
00094 virtual ~CPGFFileStream() { m_hFile = 0; }
00095 virtual void Write(int *count, void *buffer) THROW_;
00096 virtual void Read(int *count, void *buffer) THROW_;
00097 virtual void SetPos(short posMode, INT64 posOff) THROW_;
00098 virtual UINT64 GetPos() const THROW_;
00099 virtual bool IsValid() const { return m_hFile != 0; }
00100 };
00101
00106 class CPGFMemoryStream : public CPGFStream {
00107 protected:
00108 UINT8 *m_buffer, *m_pos;
00109 UINT8 *m_eos;
00110 size_t m_size;
00111 bool m_allocated;
00112
00113 public:
00116 CPGFMemoryStream(size_t size) THROW_;
00117
00121 CPGFMemoryStream(UINT8 *pBuffer, size_t size) THROW_;
00122
00126 void Reinitialize(UINT8 *pBuffer, size_t size) THROW_;
00127
00128 virtual ~CPGFMemoryStream() {
00129 m_pos = 0;
00130 if (m_allocated) {
00131
00132 delete[] m_buffer; m_buffer = 0;
00133 }
00134 }
00135
00136 virtual void Write(int *count, void *buffer) THROW_;
00137 virtual void Read(int *count, void *buffer);
00138 virtual void SetPos(short posMode, INT64 posOff) THROW_;
00139 virtual UINT64 GetPos() const { ASSERT(IsValid()); return m_pos - m_buffer; }
00140 virtual bool IsValid() const { return m_buffer != 0; }
00141
00143 size_t GetSize() const { return m_size; }
00145 const UINT8* GetBuffer() const { return m_buffer; }
00147 UINT8* GetBuffer() { return m_buffer; }
00149 UINT64 GetEOS() const { ASSERT(IsValid()); return m_eos - m_buffer; }
00151 void SetEOS(UINT64 length) { ASSERT(IsValid()); m_eos = m_buffer + length; }
00152 };
00153
00158 #ifdef _MFC_VER
00159 class CPGFMemFileStream : public CPGFStream {
00160 protected:
00161 CMemFile *m_memFile;
00162 public:
00163 CPGFMemFileStream(CMemFile *memFile) : m_memFile(memFile) {}
00164 virtual bool IsValid() const { return m_memFile != NULL; }
00165 virtual ~CPGFMemFileStream() {}
00166 virtual void Write(int *count, void *buffer) THROW_;
00167 virtual void Read(int *count, void *buffer) THROW_;
00168 virtual void SetPos(short posMode, INT64 posOff) THROW_;
00169 virtual UINT64 GetPos() const THROW_;
00170 };
00171 #endif
00172
00177 #if defined(WIN32) || defined(WINCE)
00178 class CPGFIStream : public CPGFStream {
00179 protected:
00180 IStream *m_stream;
00181 public:
00182 CPGFIStream(IStream *stream) : m_stream(stream) {}
00183 virtual bool IsValid() const { return m_stream != 0; }
00184 virtual ~CPGFIStream() {}
00185 virtual void Write(int *count, void *buffer) THROW_;
00186 virtual void Read(int *count, void *buffer) THROW_;
00187 virtual void SetPos(short posMode, INT64 posOff) THROW_;
00188 virtual UINT64 GetPos() const THROW_;
00189 IStream* GetIStream() const { return m_stream; }
00190 };
00191 #endif
00192
00193 #endif // PGF_STREAM_H