| libpgf 7.21.2 PGF - Progressive Graphics File

Public Member Functions | Protected Attributes | List of all members
CPGFMemoryStream Class Reference

Memory stream class. More...

`#include <PGFstream.h>`

Inheritance diagram for CPGFMemoryStream:

## Public Member Functions
| CPGFMemoryStream (size_t size)
| CPGFMemoryStream (UINT8 *pBuffer, size_t size)
void | Reinitialize (UINT8 *pBuffer, size_t size)
virtual | ~CPGFMemoryStream ()
virtual void | Write (int *count, void *buffer)
virtual void | Read (int *count, void *buffer)
virtual void | SetPos (short posMode, INT64 posOff)
virtual UINT64 | GetPos () const
virtual bool | IsValid () const
size_t | GetSize () const
const UINT8 * | GetBuffer () const
UINT8 * | GetBuffer ()
UINT64 | GetEOS () const
void | SetEOS (UINT64 length)

## Protected Attributes
UINT8 * | m_buffer
UINT8 * | m_pos
| buffer start address and current buffer address More...
UINT8 * | m_eos
| end of stream (first address beyond written area) More...
size_t | m_size
| buffer size More...
bool | m_allocated
| indicates a new allocated buffer More...

## Detailed Description

Memory stream class.

A PGF stream subclass for internal memory.

Author
  C. Stamm

Definition at line 106 of file PGFstream.h.

## Constructor & Destructor Documentation

## ◆ CPGFMemoryStream() [1/2]

CPGFMemoryStream::CPGFMemoryStream | ( | size_t | size | ) |

Constructor

Parameters

  size | Size of new allocated memory buffer

Allocate memory block of given size

Parameters

  size | Memory size

Definition at line 78 of file PGFstream.cpp.

79 : m_size(size)
80 , m_allocated(true) {
81 m_buffer = m_pos = m_eos = new(std::nothrow) UINT8[m_size];
82 if (!m_buffer) ReturnWithError(InsufficientMemory);
83 }
CPGFMemoryStream::m_pos
UINT8 * m_pos
buffer start address and current buffer address
Definition: PGFstream.h:108
CPGFMemoryStream::m_allocated
bool m_allocated
indicates a new allocated buffer
Definition: PGFstream.h:111
CPGFMemoryStream::m_buffer
UINT8 * m_buffer
Definition: PGFstream.h:108
CPGFMemoryStream::m_eos
UINT8 * m_eos
end of stream (first address beyond written area)
Definition: PGFstream.h:109
CPGFMemoryStream::m_size
size_t m_size
buffer size
Definition: PGFstream.h:110

## ◆ CPGFMemoryStream() [2/2]

CPGFMemoryStream::CPGFMemoryStream | ( | UINT8 * | pBuffer,
|  | size_t | size
| ) |  |

Constructor. Use already allocated memory of given size

Parameters

  pBuffer | Memory location
  size | Memory size

Use already allocated memory of given size

Parameters

  pBuffer | Memory location
  size | Memory size

Definition at line 89 of file PGFstream.cpp.

90 : m_buffer(pBuffer)
91 , m_pos(pBuffer)
92 , m_eos(pBuffer + size)
93 , m_size(size)
94 , m_allocated(false) {
95 ASSERT(IsValid());
96 }
CPGFMemoryStream::m_pos
UINT8 * m_pos
buffer start address and current buffer address
Definition: PGFstream.h:108
CPGFMemoryStream::IsValid
virtual bool IsValid() const
Definition: PGFstream.h:140
CPGFMemoryStream::m_allocated
bool m_allocated
indicates a new allocated buffer
Definition: PGFstream.h:111
CPGFMemoryStream::m_buffer
UINT8 * m_buffer
Definition: PGFstream.h:108
CPGFMemoryStream::m_eos
UINT8 * m_eos
end of stream (first address beyond written area)
Definition: PGFstream.h:109
CPGFMemoryStream::m_size
size_t m_size
buffer size
Definition: PGFstream.h:110

## ◆ ~CPGFMemoryStream()

virtual CPGFMemoryStream::~CPGFMemoryStream | ( |  | ) |
| inline virtual

Definition at line 128 of file PGFstream.h.

128 {
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 }
CPGFMemoryStream::m_pos
UINT8 * m_pos
buffer start address and current buffer address
Definition: PGFstream.h:108
CPGFMemoryStream::m_allocated
bool m_allocated
indicates a new allocated buffer
Definition: PGFstream.h:111
CPGFMemoryStream::m_buffer
UINT8 * m_buffer
Definition: PGFstream.h:108

## Member Function Documentation

## ◆ GetBuffer() [1/2]

const UINT8* CPGFMemoryStream::GetBuffer | ( |  | ) | const
| inline

Returns
  Memory buffer

Definition at line 145 of file PGFstream.h.

145 { return m_buffer; }
CPGFMemoryStream::m_buffer
UINT8 * m_buffer
Definition: PGFstream.h:108

## ◆ GetBuffer() [2/2]

UINT8* CPGFMemoryStream::GetBuffer | ( |  | ) |
| inline

Returns
  Memory buffer

Definition at line 147 of file PGFstream.h.

147 { return m_buffer; }
CPGFMemoryStream::m_buffer
UINT8 * m_buffer
Definition: PGFstream.h:108

## ◆ GetEOS()

UINT64 CPGFMemoryStream::GetEOS | ( |  | ) | const
| inline

Returns
  relative position of end of stream (= stream length)

Definition at line 149 of file PGFstream.h.

149 { ASSERT(IsValid()); return m_eos - m_buffer; }
CPGFMemoryStream::IsValid
virtual bool IsValid() const
Definition: PGFstream.h:140
CPGFMemoryStream::m_buffer
UINT8 * m_buffer
Definition: PGFstream.h:108
CPGFMemoryStream::m_eos
UINT8 * m_eos
end of stream (first address beyond written area)
Definition: PGFstream.h:109

## ◆ GetPos()

virtual UINT64 CPGFMemoryStream::GetPos | ( |  | ) | const
| inline virtual

Get current stream position.

Returns
  Current stream position

Implements CPGFStream.

Definition at line 139 of file PGFstream.h.

139 { ASSERT(IsValid()); return m_pos - m_buffer; }
CPGFMemoryStream::m_pos
UINT8 * m_pos
buffer start address and current buffer address
Definition: PGFstream.h:108
CPGFMemoryStream::IsValid
virtual bool IsValid() const
Definition: PGFstream.h:140
CPGFMemoryStream::m_buffer
UINT8 * m_buffer
Definition: PGFstream.h:108

## ◆ GetSize()

size_t CPGFMemoryStream::GetSize | ( |  | ) | const
| inline

Returns
  Memory size

Definition at line 143 of file PGFstream.h.

143 { return m_size; }
CPGFMemoryStream::m_size
size_t m_size
buffer size
Definition: PGFstream.h:110

## ◆ IsValid()

virtual bool CPGFMemoryStream::IsValid | ( |  | ) | const
| inline virtual

Check stream validity.

Returns
  True if stream and current position is valid

Implements CPGFStream.

Definition at line 140 of file PGFstream.h.

140 { return m_buffer != 0; }
CPGFMemoryStream::m_buffer
UINT8 * m_buffer
Definition: PGFstream.h:108

## ◆ Read()

void CPGFMemoryStream::Read | ( | int * | count,
|  | void * | buffer
| ) |  |
| virtual

Read some bytes from this stream and stores them into a buffer.

Parameters

  count | A pointer to a value containing the number of bytes should be read. After this call it contains the number of read bytes.
  buffer | A memory buffer

Implements CPGFStream.

Definition at line 148 of file PGFstream.cpp.

148 {
149 ASSERT(IsValid());
150 ASSERT(count);
151 ASSERT(buffPtr);
152 ASSERT(m_buffer + m_size >= m_eos);
153 ASSERT(m_pos <= m_eos);
154
155 if (m_pos + *count <= m_eos) {
156 memcpy(buffPtr, m_pos, *count);
157 m_pos += *count;
158 } else {
159 // end of memory block reached -> read only until end
160 *count = (int)__max(0, m_eos - m_pos);
161 memcpy(buffPtr, m_pos, *count);
162 m_pos += *count;
163 }
164 ASSERT(m_pos <= m_eos);
165 }
CPGFMemoryStream::m_pos
UINT8 * m_pos
buffer start address and current buffer address
Definition: PGFstream.h:108
CPGFMemoryStream::IsValid
virtual bool IsValid() const
Definition: PGFstream.h:140
__max
#define __max(x, y)
Definition: PGFplatform.h:92
CPGFMemoryStream::m_buffer
UINT8 * m_buffer
Definition: PGFstream.h:108
CPGFMemoryStream::m_eos
UINT8 * m_eos
end of stream (first address beyond written area)
Definition: PGFstream.h:109
CPGFMemoryStream::m_size
size_t m_size
buffer size
Definition: PGFstream.h:110

## ◆ Reinitialize()

void CPGFMemoryStream::Reinitialize | ( | UINT8 * | pBuffer,
|  | size_t | size
| ) |  |

Use already allocated memory of given size

Parameters

  pBuffer | Memory location
  size | Memory size

Definition at line 102 of file PGFstream.cpp.

102 {
103 if (!m_allocated) {
104 m_buffer = m_pos = pBuffer;
105 m_size = size;
106 m_eos = m_buffer + size;
107 }
108 }
CPGFMemoryStream::m_pos
UINT8 * m_pos
buffer start address and current buffer address
Definition: PGFstream.h:108
CPGFMemoryStream::m_allocated
bool m_allocated
indicates a new allocated buffer
Definition: PGFstream.h:111
CPGFMemoryStream::m_buffer
UINT8 * m_buffer
Definition: PGFstream.h:108
CPGFMemoryStream::m_eos
UINT8 * m_eos
end of stream (first address beyond written area)
Definition: PGFstream.h:109
CPGFMemoryStream::m_size
size_t m_size
buffer size
Definition: PGFstream.h:110

## ◆ SetEOS()

void CPGFMemoryStream::SetEOS | ( | UINT64 | length | ) |
| inline

Parameters

  length | Stream length (= relative position of end of stream)

Definition at line 151 of file PGFstream.h.

151 { ASSERT(IsValid()); m_eos = m_buffer + length; }
CPGFMemoryStream::IsValid
virtual bool IsValid() const
Definition: PGFstream.h:140
CPGFMemoryStream::m_buffer
UINT8 * m_buffer
Definition: PGFstream.h:108
CPGFMemoryStream::m_eos
UINT8 * m_eos
end of stream (first address beyond written area)
Definition: PGFstream.h:109

## ◆ SetPos()

void CPGFMemoryStream::SetPos | ( | short | posMode,
|  | INT64 | posOff
| ) |  |
| virtual

Set stream position either absolute or relative.

Parameters

  posMode | A position mode (FSFromStart, FSFromCurrent, FSFromEnd)
  posOff | A new stream position (absolute positioning) or a position offset (relative positioning)

Implements CPGFStream.

Definition at line 168 of file PGFstream.cpp.

168 {
169 ASSERT(IsValid());
170 switch(posMode) {
171 case FSFromStart:
172 m_pos = m_buffer + posOff;
173 break;
174 case FSFromCurrent:
175 m_pos += posOff;
176 break;
177 case FSFromEnd:
178 m_pos = m_eos + posOff;
179 break;
180 default:
181 ASSERT(false);
182 }
183 if (m_pos > m_eos)
184 ReturnWithError(InvalidStreamPos);
185 }
CPGFMemoryStream::m_pos
UINT8 * m_pos
buffer start address and current buffer address
Definition: PGFstream.h:108
CPGFMemoryStream::IsValid
virtual bool IsValid() const
Definition: PGFstream.h:140
CPGFMemoryStream::m_buffer
UINT8 * m_buffer
Definition: PGFstream.h:108
CPGFMemoryStream::m_eos
UINT8 * m_eos
end of stream (first address beyond written area)
Definition: PGFstream.h:109

## ◆ Write()

void CPGFMemoryStream::Write | ( | int * | count,
|  | void * | buffer
| ) |  |
| virtual

Write some bytes out of a buffer into this stream.

Parameters

  count | A pointer to a value containing the number of bytes should be written. After this call it contains the number of written bytes.
  buffer | A memory buffer

Implements CPGFStream.

Definition at line 111 of file PGFstream.cpp.

111 {
112 ASSERT(count);
113 ASSERT(buffPtr);
114 ASSERT(IsValid());
115 const size_t deltaSize = 0x4000 + *count;
116
117 if (m_pos + *count <= m_buffer + m_size) {
118 memcpy(m_pos, buffPtr, *count);
119 m_pos += *count;
120 if (m_pos > m_eos) m_eos = m_pos;
121 } else if (m_allocated) {
122 // memory block is too small -> reallocate a deltaSize larger block
123 size_t offset = m_pos - m_buffer;
124 UINT8 *buf_tmp = (UINT8 *)realloc(m_buffer, m_size + deltaSize);
125 if (!buf_tmp) {
126 delete[] m_buffer;
127 m_buffer = 0;
128 ReturnWithError(InsufficientMemory);
129 } else {
130 m_buffer = buf_tmp;
131 }
132 m_size += deltaSize;
133
134 // reposition m_pos
135 m_pos = m_buffer + offset;
136
137 // write block
138 memcpy(m_pos, buffPtr, *count);
139 m_pos += *count;
140 if (m_pos > m_eos) m_eos = m_pos;
141 } else {
142 ReturnWithError(InsufficientMemory);
143 }
144 ASSERT(m_pos <= m_eos);
145 }
CPGFMemoryStream::m_pos
UINT8 * m_pos
buffer start address and current buffer address
Definition: PGFstream.h:108
CPGFMemoryStream::IsValid
virtual bool IsValid() const
Definition: PGFstream.h:140
CPGFMemoryStream::m_allocated
bool m_allocated
indicates a new allocated buffer
Definition: PGFstream.h:111
CPGFMemoryStream::m_buffer
UINT8 * m_buffer
Definition: PGFstream.h:108
CPGFMemoryStream::m_eos
UINT8 * m_eos
end of stream (first address beyond written area)
Definition: PGFstream.h:109
CPGFMemoryStream::m_size
size_t m_size
buffer size
Definition: PGFstream.h:110

## Member Data Documentation

## ◆ m_allocated

bool CPGFMemoryStream::m_allocated
| protected

indicates a new allocated buffer

Definition at line 111 of file PGFstream.h.

## ◆ m_buffer

UINT8* CPGFMemoryStream::m_buffer
| protected

Definition at line 108 of file PGFstream.h.

## ◆ m_eos

UINT8* CPGFMemoryStream::m_eos
| protected

end of stream (first address beyond written area)

Definition at line 109 of file PGFstream.h.

## ◆ m_pos

UINT8 * CPGFMemoryStream::m_pos
| protected

buffer start address and current buffer address

Definition at line 108 of file PGFstream.h.

## ◆ m_size

size_t CPGFMemoryStream::m_size
| protected

buffer size

Definition at line 110 of file PGFstream.h.

The documentation for this class was generated from the following files:

- PGFstream.h
- PGFstream.cpp