Scribus
Open source desktop publishing at your fingertips
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_;
117 
121  CPGFMemoryStream(UINT8 *pBuffer, size_t size) THROW_;
122 
126  void Reinitialize(UINT8 *pBuffer, size_t size) THROW_;
127 
128  virtual ~CPGFMemoryStream() {
129  m_pos = 0;
130  if (m_allocated) {
131  // the memory buffer has been allocated inside of CPMFmemoryStream constructor
132  delete[] m_buffer; m_buffer = 0;
133  }
134  }
135 
136  virtual void Write(int *count, void *buffer) THROW_; // throws IOException
137  virtual void Read(int *count, void *buffer);
138  virtual void SetPos(short posMode, INT64 posOff) THROW_; // throws IOException
139  virtual UINT64 GetPos() const { ASSERT(IsValid()); return m_pos - m_buffer; }
140  virtual bool IsValid() const { return m_buffer != 0; }
141 
143  size_t GetSize() const { return m_size; }
145  const UINT8* GetBuffer() const { return m_buffer; }
147  UINT8* GetBuffer() { return m_buffer; }
149  UINT64 GetEOS() const { ASSERT(IsValid()); return m_eos - m_buffer; }
151  void SetEOS(UINT64 length) { ASSERT(IsValid()); m_eos = m_buffer + length; }
152 };
153 
158 #ifdef _MFC_VER
159 class CPGFMemFileStream : public CPGFStream {
160 protected:
161  CMemFile *m_memFile;
162 public:
163  CPGFMemFileStream(CMemFile *memFile) : m_memFile(memFile) {}
164  virtual bool IsValid() const { return m_memFile != NULL; }
165  virtual ~CPGFMemFileStream() {}
166  virtual void Write(int *count, void *buffer) THROW_; // throws IOException
167  virtual void Read(int *count, void *buffer) THROW_; // throws IOException
168  virtual void SetPos(short posMode, INT64 posOff) THROW_; // throws IOException
169  virtual UINT64 GetPos() const THROW_; // throws IOException
170 };
171 #endif
172 
177 #if defined(WIN32) || defined(WINCE)
178 class CPGFIStream : public CPGFStream {
179 protected:
180  IStream *m_stream;
181 public:
182  CPGFIStream(IStream *stream) : m_stream(stream) {}
183  virtual bool IsValid() const { return m_stream != 0; }
184  virtual ~CPGFIStream() {}
185  virtual void Write(int *count, void *buffer) THROW_; // throws IOException
186  virtual void Read(int *count, void *buffer) THROW_; // throws IOException
187  virtual void SetPos(short posMode, INT64 posOff) THROW_; // throws IOException
188  virtual UINT64 GetPos() const THROW_; // throws IOException
189  IStream* GetIStream() const { return m_stream; }
190 };
191 #endif
192 
193 #endif // PGF_STREAM_H
virtual void Write(int *count, void *buffer) THROW_
Definition: PGFstream.cpp:38
HANDLE m_hFile
file handle
Definition: PGFstream.h:84
virtual void SetPos(short posMode, INT64 posOff)=0
size_t m_size
buffer size
Definition: PGFstream.h:110
virtual ~CPGFStream()
Standard destructor.
Definition: PGFstream.h:47
Abstract stream base class.
Definition: PGFstream.h:39
CPGFMemoryStream(size_t size) THROW_
Definition: PGFstream.cpp:78
virtual void SetPos(short posMode, INT64 posOff) THROW_
Definition: PGFstream.cpp:57
Memory stream class.
Definition: PGFstream.h:106
File stream class.
Definition: PGFstream.h:82
UINT8 * m_eos
end of stream (first address beyond written area)
Definition: PGFstream.h:109
virtual void Read(int *count, void *buffer) THROW_
Definition: PGFstream.cpp:48
UINT64 GetEOS() const
Definition: PGFstream.h:149
virtual bool IsValid() const
Definition: PGFstream.h:140
virtual bool IsValid() const =0
virtual void SetPos(short posMode, INT64 posOff) THROW_
Definition: PGFstream.cpp:168
virtual void Write(int *count, void *buffer) THROW_
Definition: PGFstream.cpp:111
CPGFFileStream(HANDLE hFile)
Definition: PGFstream.h:90
size_t GetSize() const
Definition: PGFstream.h:143
UINT8 * GetBuffer()
Definition: PGFstream.h:147
void Reinitialize(UINT8 *pBuffer, size_t size) THROW_
Definition: PGFstream.cpp:102
virtual void Write(int *count, void *buffer)=0
virtual void Read(int *count, void *buffer)
Definition: PGFstream.cpp:148
virtual UINT64 GetPos() const =0
virtual UINT64 GetPos() const THROW_
Definition: PGFstream.cpp:64
UINT8 * m_pos
buffer start address and current buffer address
Definition: PGFstream.h:108
virtual bool IsValid() const
Definition: PGFstream.h:99
PGF definitions.
HANDLE GetHandle()
Definition: PGFstream.h:92
bool m_allocated
indicates a new allocated buffer
Definition: PGFstream.h:111
void SetEOS(UINT64 length)
Definition: PGFstream.h:151
Binary buffer.
Definition: pdbim.h:93
const UINT8 * GetBuffer() const
Definition: PGFstream.h:145
virtual void Read(int *count, void *buffer)=0
virtual UINT64 GetPos() const
Definition: PGFstream.h:139
CPGFStream()
Standard constructor.
Definition: PGFstream.h:43