libpgf 7.21.2
PGF - Progressive Graphics File
Loading...
Searching...
No Matches
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
40public:
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
82class CPGFFileStream : public CPGFStream {
83protected:
84 HANDLE m_hFile;
85
86public:
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); // throws IOException
96 virtual void Read(int *count, void *buffer); // throws IOException
97 virtual void SetPos(short posMode, INT64 posOff); // throws IOException
98 virtual UINT64 GetPos() const; // throws IOException
99 virtual bool IsValid() const { return m_hFile != 0; }
100};
101
107protected:
108 UINT8 *m_buffer, *m_pos;
109 UINT8 *m_eos;
110 size_t m_size;
112
113public:
116 CPGFMemoryStream(size_t size);
117
121 CPGFMemoryStream(UINT8 *pBuffer, size_t size);
122
126 void Reinitialize(UINT8 *pBuffer, size_t size);
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); // throws IOException
137 virtual void Read(int *count, void *buffer);
138 virtual void SetPos(short posMode, INT64 posOff); // 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
159class CPGFMemFileStream : public CPGFStream {
160protected:
161 CMemFile *m_memFile;
162public:
163 CPGFMemFileStream(CMemFile *memFile) : m_memFile(memFile) {}
164 virtual bool IsValid() const { return m_memFile != nullptr; }
165 virtual ~CPGFMemFileStream() {}
166 virtual void Write(int *count, void *buffer); // throws IOException
167 virtual void Read(int *count, void *buffer); // throws IOException
168 virtual void SetPos(short posMode, INT64 posOff); // throws IOException
169 virtual UINT64 GetPos() const; // throws IOException
170};
171#endif
172
177#if defined(WIN32) || defined(WINCE)
178class CPGFIStream : public CPGFStream {
179protected:
180 IStream *m_stream;
181public:
182 CPGFIStream(IStream *stream) : m_stream(stream) { m_stream->AddRef(); }
183 virtual bool IsValid() const { return m_stream != 0; }
184 virtual ~CPGFIStream() { m_stream->Release(); }
185 virtual void Write(int *count, void *buffer); // throws IOException
186 virtual void Read(int *count, void *buffer); // throws IOException
187 virtual void SetPos(short posMode, INT64 posOff); // throws IOException
188 virtual UINT64 GetPos() const; // throws IOException
189 IStream* GetIStream() const { return m_stream; }
190};
191#endif
192
193#endif // PGF_STREAM_H
PGF definitions.
File stream class.
Definition PGFstream.h:82
virtual void SetPos(short posMode, INT64 posOff)
Definition PGFstream.cpp:57
virtual void Write(int *count, void *buffer)
Definition PGFstream.cpp:38
HANDLE m_hFile
file handle
Definition PGFstream.h:84
virtual void Read(int *count, void *buffer)
Definition PGFstream.cpp:48
HANDLE GetHandle()
Definition PGFstream.h:92
virtual bool IsValid() const
Definition PGFstream.h:99
virtual UINT64 GetPos() const
Definition PGFstream.cpp:64
CPGFFileStream(HANDLE hFile)
Definition PGFstream.h:90
virtual ~CPGFFileStream()
Definition PGFstream.h:94
Memory stream class.
Definition PGFstream.h:106
void SetEOS(UINT64 length)
Definition PGFstream.h:151
virtual void SetPos(short posMode, INT64 posOff)
virtual UINT64 GetPos() const
Definition PGFstream.h:139
size_t GetSize() const
Definition PGFstream.h:143
virtual void Read(int *count, void *buffer)
virtual bool IsValid() const
Definition PGFstream.h:140
virtual void Write(int *count, void *buffer)
size_t m_size
buffer size
Definition PGFstream.h:110
UINT8 * m_eos
end of stream (first address beyond written area)
Definition PGFstream.h:109
UINT8 * m_pos
buffer start address and current buffer address
Definition PGFstream.h:108
UINT8 * GetBuffer()
Definition PGFstream.h:147
const UINT8 * GetBuffer() const
Definition PGFstream.h:145
virtual ~CPGFMemoryStream()
Definition PGFstream.h:128
bool m_allocated
indicates a new allocated buffer
Definition PGFstream.h:111
UINT64 GetEOS() const
Definition PGFstream.h:149
void Reinitialize(UINT8 *pBuffer, size_t size)
Abstract stream base class.
Definition PGFstream.h:39
virtual void Write(int *count, void *buffer)=0
CPGFStream()
Standard constructor.
Definition PGFstream.h:43
virtual ~CPGFStream()
Standard destructor.
Definition PGFstream.h:47
virtual void SetPos(short posMode, INT64 posOff)=0
virtual UINT64 GetPos() const =0
virtual bool IsValid() const =0
virtual void Read(int *count, void *buffer)=0