CPGFMemoryStream man page

CPGFMemoryStream — Memory stream class.

Synopsis

#include <PGFstream.h>

Inherits CPGFStream.

Public Member Functions

CPGFMemoryStream (size_t size) THROW_

CPGFMemoryStream (UINT8 *pBuffer, size_t size) THROW_

void Reinitialize (UINT8 *pBuffer, size_t size) THROW_

virtual ~CPGFMemoryStream ()

virtual void Write (int *count, void *buffer) THROW_

virtual void Read (int *count, void *buffer)

virtual void SetPos (short posMode, INT64 posOff) THROW_

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
UINT8 * m_eos
end of stream (first address beyond written area)
size_t m_size
buffer size
bool m_allocated
indicates a new allocated buffer

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::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::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 }

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         }

Member Function Documentation

const UINT8* CPGFMemoryStream::GetBuffer () const [inline]

Returns:

Memory buffer

Definition at line 145 of file PGFstream.h.

145 { return m_buffer; }

UINT8* CPGFMemoryStream::GetBuffer () [inline]

Returns:

Memory buffer

Definition at line 147 of file PGFstream.h.

147 { return m_buffer; }

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; }

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; }

size_t CPGFMemoryStream::GetSize () const [inline]

Returns:

Memory size

Definition at line 143 of file PGFstream.h.

143 { return m_size; }

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; }

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 }

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 }

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; }

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 }

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 }

Member Data Documentation

bool CPGFMemoryStream::m_allocated [protected]

indicates a new allocated buffer

Definition at line 111 of file PGFstream.h.

UINT8* CPGFMemoryStream::m_buffer [protected]

Definition at line 108 of file PGFstream.h.

UINT8* CPGFMemoryStream::m_eos [protected]

end of stream (first address beyond written area)

Definition at line 109 of file PGFstream.h.

UINT8 * CPGFMemoryStream::m_pos [protected]

buffer start address and current buffer address

Definition at line 108 of file PGFstream.h.

size_t CPGFMemoryStream::m_size [protected]

buffer size

Definition at line 110 of file PGFstream.h.

Author

Generated automatically by Doxygen for libpgf from the source code.

Info

Thu Feb 4 2016 Version 6.14.12 libpgf