CPGFMemoryStream - Man Page
Memory stream class.
Synopsis
#include <PGFstream.h>
Inherits CPGFStream.
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
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
UINT8 * CPGFMemoryStream::GetBuffer () [inline]
- Returns
Memory buffer
Definition at line 147 of file PGFstream.h.
147 { return m_buffer; }
const UINT8 * CPGFMemoryStream::GetBuffer () const [inline]
- Returns
Memory buffer
Definition at line 145 of file PGFstream.h.
145 { 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.