libpgf  6.12.24
PGF - Progressive Graphics File
PGFstream.h
Go to the documentation of this file.
1 /*
2  * The Progressive Graphics File; http://www.libpgf.org
3  *
4  * $Date: 2007-06-11 10:56:17 +0200 (Mo, 11 Jun 2007) $
5  * $Revision: 299 $
6  *
7  * This file Copyright (C) 2006 xeraina GmbH, Switzerland
8  *
9  * This program is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU LESSER GENERAL PUBLIC LICENSE
11  * as published by the Free Software Foundation; either version 2.1
12  * of the License, or (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22  */
23 
28 
29 #ifndef PGF_STREAM_H
30 #define PGF_STREAM_H
31 
32 #include "PGFtypes.h"
33 #include <new>
34 
39 class CPGFStream {
40 public:
44 
47  virtual ~CPGFStream() {}
48 
53  virtual void Write(int *count, void *buffer)=0;
54 
59  virtual void Read(int *count, void *buffer)=0;
60 
65  virtual void SetPos(short posMode, INT64 posOff)=0;
66 
70  virtual UINT64 GetPos() const=0;
71 
75  virtual bool IsValid() const=0;
76 };
77 
82 class CPGFFileStream : public CPGFStream {
83 protected:
84  HANDLE m_hFile;
85 
86 public:
87  CPGFFileStream() : m_hFile(0) {}
90  CPGFFileStream(HANDLE hFile) : m_hFile(hFile) {}
92  HANDLE GetHandle() { return m_hFile; }
93 
94  virtual ~CPGFFileStream() { m_hFile = 0; }
95  virtual void Write(int *count, void *buffer) THROW_; // throws IOException
96  virtual void Read(int *count, void *buffer) THROW_; // throws IOException
97  virtual void SetPos(short posMode, INT64 posOff) THROW_; // throws IOException
98  virtual UINT64 GetPos() const THROW_; // throws IOException
99  virtual bool IsValid() const { return m_hFile != 0; }
100 };
101 
106 class CPGFMemoryStream : public CPGFStream {
107 protected:
108  UINT8 *m_buffer, *m_pos;
109  UINT8 *m_eos;
110  size_t m_size;
111  bool m_allocated;
112 
113 public:
116  CPGFMemoryStream(size_t size) THROW_;
120  CPGFMemoryStream(UINT8 *pBuffer, size_t size) THROW_;
124  void Reinitialize(UINT8 *pBuffer, size_t size) THROW_;
125 
126  virtual ~CPGFMemoryStream() {
127  m_pos = 0;
128  if (m_allocated) {
129  // the memory buffer has been allocated inside of CPMFmemoryStream constructor
130  delete[] m_buffer; m_buffer = 0;
131  }
132  }
133 
134  virtual void Write(int *count, void *buffer) THROW_; // throws IOException
135  virtual void Read(int *count, void *buffer);
136  virtual void SetPos(short posMode, INT64 posOff) THROW_; // throws IOException
137  virtual UINT64 GetPos() const { ASSERT(IsValid()); return m_pos - m_buffer; }
138  virtual bool IsValid() const { return m_buffer != 0; }
139 
141  size_t GetSize() const { return m_size; }
143  const UINT8* GetBuffer() const { return m_buffer; }
145  UINT8* GetBuffer() { return m_buffer; }
147  UINT64 GetEOS() const { ASSERT(IsValid()); return m_eos - m_buffer; }
149  void SetEOS(UINT64 length) { ASSERT(IsValid()); m_eos = m_buffer + length; }
150 };
151 
156 #ifdef _MFC_VER
157 class CPGFMemFileStream : public CPGFStream {
158 protected:
159  CMemFile *m_memFile;
160 public:
161  CPGFMemFileStream(CMemFile *memFile) : m_memFile(memFile) {}
162  virtual bool IsValid() const { return m_memFile != NULL; }
163  virtual ~CPGFMemFileStream() {}
164  virtual void Write(int *count, void *buffer) THROW_; // throws IOException
165  virtual void Read(int *count, void *buffer) THROW_; // throws IOException
166  virtual void SetPos(short posMode, INT64 posOff) THROW_; // throws IOException
167  virtual UINT64 GetPos() const THROW_; // throws IOException
168 };
169 #endif
170 
175 #if defined(WIN32) || defined(WINCE)
176 class CPGFIStream : public CPGFStream {
177 protected:
178  IStream *m_stream;
179 public:
180  CPGFIStream(IStream *stream) : m_stream(stream) {}
181  virtual bool IsValid() const { return m_stream != 0; }
182  virtual ~CPGFIStream() {}
183  virtual void Write(int *count, void *buffer) THROW_; // throws IOException
184  virtual void Read(int *count, void *buffer) THROW_; // throws IOException
185  virtual void SetPos(short posMode, INT64 posOff) THROW_; // throws IOException
186  virtual UINT64 GetPos() const THROW_; // throws IOException
187  IStream* GetIStream() const { return m_stream; }
188 };
189 #endif
190 
191 #endif // PGF_STREAM_H
virtual void Read(int *count, void *buffer)=0
virtual bool IsValid() const
Definition: PGFstream.h:99
UINT8 * m_pos
buffer start address and current buffer address
Definition: PGFstream.h:108
virtual ~CPGFMemoryStream()
Definition: PGFstream.h:126
virtual void Write(int *count, void *buffer)=0
Abstract stream base class.
Definition: PGFstream.h:39
virtual ~CPGFFileStream()
Definition: PGFstream.h:94
virtual bool IsValid() const
Definition: PGFstream.h:138
bool m_allocated
indicates a new allocated buffer
Definition: PGFstream.h:111
UINT64 GetEOS() const
Definition: PGFstream.h:147
virtual void SetPos(short posMode, INT64 posOff)=0
Memory stream class.
Definition: PGFstream.h:106
HANDLE GetHandle()
Definition: PGFstream.h:92
virtual UINT64 GetPos() const
Definition: PGFstream.h:137
void SetEOS(UINT64 length)
Definition: PGFstream.h:149
virtual bool IsValid() const =0
UINT8 * GetBuffer()
Definition: PGFstream.h:145
UINT8 * m_eos
end of stream (first address beyond written area)
Definition: PGFstream.h:109
virtual UINT64 GetPos() const =0
size_t GetSize() const
Definition: PGFstream.h:141
PGF definitions.
CPGFStream()
Standard constructor.
Definition: PGFstream.h:43
HANDLE m_hFile
file handle
Definition: PGFstream.h:84
size_t m_size
buffer size
Definition: PGFstream.h:110
File stream class.
Definition: PGFstream.h:82
CPGFFileStream(HANDLE hFile)
Definition: PGFstream.h:90
const UINT8 * GetBuffer() const
Definition: PGFstream.h:143
virtual ~CPGFStream()
Standard destructor.
Definition: PGFstream.h:47