libpgf  6.12.24
PGF - Progressive Graphics File
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
CPGFMemoryStream Class Reference

#include <PGFstream.h>

Inheritance diagram for CPGFMemoryStream:
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)
 
*Set stream position either
absolute or relative *param
posMode A position 
mode (FSFromStart, FSFromCurrent, FSFromEnd)*@param posOff A new stream position(absolute positioning) or a position offset(relative positioning)*/virtual void SetPos(short posMode
 

Public Attributes

*Set stream position either
absolute or relative *param
posMode A position INT64 
posOff =0
 

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

Definition at line 105 of file PGFstream.h.

Constructor & Destructor Documentation

*Allocate memory block of given size *param size Memory size * CPGFMemoryStream::CPGFMemoryStream ( size_t  size)

Constructor

Parameters
sizeSize of new allocated memory buffer

Definition at line 78 of file PGFstream.cpp.

, m_allocated(true) {
m_buffer = m_pos = m_eos = new(std::nothrow) UINT8[m_size];
if (!m_buffer) ReturnWithError(InsufficientMemory);
}
*Use already allocated memory of given size *param pBuffer Memory location *param size Memory size * CPGFMemoryStream::CPGFMemoryStream ( UINT8 *  pBuffer,
size_t  size 
)

Constructor. Use already allocated memory of given size

Parameters
pBufferMemory location
sizeMemory size

Definition at line 89 of file PGFstream.cpp.

: m_buffer(pBuffer)
, m_pos(pBuffer)
, m_eos(pBuffer + size)
, m_allocated(false) {
}
virtual CPGFMemoryStream::~CPGFMemoryStream ( )
inlinevirtual

Definition at line 126 of file PGFstream.h.

{
m_pos = 0;
if (m_allocated) {
// the memory buffer has been allocated inside of CPMFmemoryStream constructor
delete[] m_buffer; m_buffer = 0;
}
}

Member Function Documentation

const UINT8* CPGFMemoryStream::GetBuffer ( ) const
inline
Returns
Memory buffer

Definition at line 143 of file PGFstream.h.

{ return m_buffer; }
UINT8* CPGFMemoryStream::GetBuffer ( )
inline
Returns
Memory buffer

Definition at line 145 of file PGFstream.h.

{ return m_buffer; }
UINT64 CPGFMemoryStream::GetEOS ( ) const
inline
Returns
relative position of end of stream (= stream length)

Definition at line 147 of file PGFstream.h.

{ ASSERT(IsValid()); return m_eos - m_buffer; }
virtual UINT64 CPGFMemoryStream::GetPos ( ) const
inlinevirtual

Implements CPGFStream.

Definition at line 137 of file PGFstream.h.

{ ASSERT(IsValid()); return m_pos - m_buffer; }
size_t CPGFMemoryStream::GetSize ( ) const
inline
Returns
Memory size

Definition at line 141 of file PGFstream.h.

{ return m_size; }
virtual bool CPGFMemoryStream::IsValid ( ) const
inlinevirtual

Implements CPGFStream.

Definition at line 138 of file PGFstream.h.

{ return m_buffer != 0; }
* Set stream position either absolute or relative* param posMode A position CPGFStream::mode ( FSFromStart  ,
FSFromCurrent  ,
FSFromEnd   
)
newinherited
void CPGFMemoryStream::Read ( int *  count,
void *  buffer 
)
virtual

Implements CPGFStream.

Definition at line 148 of file PGFstream.cpp.

{
ASSERT(buffPtr);
if (m_pos + *count <= m_eos) {
memcpy(buffPtr, m_pos, *count);
m_pos += *count;
} else {
// end of memory block reached -> read only until end
*count = (int)__max(0, m_eos - m_pos);
memcpy(buffPtr, m_pos, *count);
m_pos += *count;
}
}
*Use already allocated memory of given size *param pBuffer Memory location *param size Memory size *void CPGFMemoryStream::Reinitialize ( UINT8 *  pBuffer,
size_t  size 
)

Constructor. Use already allocated memory of given size

Parameters
pBufferMemory location
sizeMemory size

Definition at line 102 of file PGFstream.cpp.

{
if (!m_allocated) {
m_buffer = m_pos = pBuffer;
}
}
void CPGFMemoryStream::SetEOS ( UINT64  length)
inline
Parameters
lengthStream length (= relative position of end of stream)

Definition at line 149 of file PGFstream.h.

{ ASSERT(IsValid()); m_eos = m_buffer + length; }
void CPGFMemoryStream::SetPos ( short  posMode,
INT64  posOff 
)
virtual

Definition at line 168 of file PGFstream.cpp.

{
switch(posMode) {
case FSFromStart:
break;
case FSFromCurrent:
break;
case FSFromEnd:
break;
default:
ASSERT(false);
}
if (m_pos > m_eos)
ReturnWithError(InvalidStreamPos);
}
void CPGFMemoryStream::Write ( int *  count,
void *  buffer 
)
virtual

Implements CPGFStream.

Definition at line 111 of file PGFstream.cpp.

{
ASSERT(buffPtr);
const size_t deltaSize = 0x4000 + *count;
if (m_pos + *count <= m_buffer + m_size) {
memcpy(m_pos, buffPtr, *count);
m_pos += *count;
if (m_pos > m_eos) m_eos = m_pos;
} else if (m_allocated) {
// memory block is too small -> reallocate a deltaSize larger block
size_t offset = m_pos - m_buffer;
UINT8 *buf_tmp = (UINT8 *)realloc(m_buffer, m_size + deltaSize);
if (!buf_tmp) {
delete[] m_buffer;
m_buffer = 0;
ReturnWithError(InsufficientMemory);
} else {
m_buffer = buf_tmp;
}
m_size += deltaSize;
// reposition m_pos
m_pos = m_buffer + offset;
// write block
memcpy(m_pos, buffPtr, *count);
m_pos += *count;
if (m_pos > m_eos) m_eos = m_pos;
} else {
ReturnWithError(InsufficientMemory);
}
}

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.

* Set stream position either absolute or relative* param posMode A position INT64 CPGFStream::posOff =0
inherited

Definition at line 65 of file PGFstream.h.


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