This class implement a copy on write behavior for memory stream buffer. More...
#include <mem_stream.h>
Classes | |
| struct | TMemStreamBuffer |
Public Types | |
| typedef CObjectVector< uint8, false > | TBuffer |
Public Member Functions | |
| CMemStreamBuffer () | |
| constructor, allocate a shared buffer | |
| const TBuffer & | getBuffer () const |
| Return a read accessor to the buffer. | |
| TBuffer & | getBufferWrite () |
| Return a write accessor to the buffer, create acopy it if more than one CMemStreamBuffer reference then buffer. | |
| void | swap (CMemStreamBuffer &other) |
| Exchange the buffer of two CMemStreamBuffer (just swap memory pointer). | |
Public Attributes | |
| uint32 | Pos |
Private Types | |
| typedef CSmartPtr < TMemStreamBuffer > | TMemStreamBufferPtr |
Private Attributes | |
| TMemStreamBufferPtr | _SharedBuffer |
This class implement a copy on write behavior for memory stream buffer.
The goal is to allow buffer sharing between CMemStream object, so that a CMemStream can be copied or passed by value as input/output parameter without copying the data buffer (thus making a CMemStrem copy almost free). This class reference a TMemStreamBuffer object with a smart pointer, when some code call the getBufferWrite() method to obtain write access to the memory buffer, if the ref count is more than 1, then we make a copy of the internal buffer for the current object.
Boris Boucher
Definition at line 56 of file mem_stream.h.
| typedef CObjectVector<uint8, false> NLMISC::CMemStreamBuffer::TBuffer |
Definition at line 59 of file mem_stream.h.
typedef CSmartPtr<TMemStreamBuffer> NLMISC::CMemStreamBuffer::TMemStreamBufferPtr [private] |
Definition at line 67 of file mem_stream.h.
| NLMISC::CMemStreamBuffer::CMemStreamBuffer | ( | ) | [inline] |
constructor, allocate a shared buffer
Definition at line 76 of file mem_stream.h.
References _SharedBuffer, and Pos.
| const TBuffer& NLMISC::CMemStreamBuffer::getBuffer | ( | ) | const [inline] |
Return a read accessor to the buffer.
Definition at line 84 of file mem_stream.h.
References _SharedBuffer.
Referenced by NLMISC::CMemStream::buffer(), NLMISC::CBitMemStream::displayStream(), NLMISC::CMemStream::fastRead(), NLMISC::CMemStream::fastSerial(), NLMISC::CMemStream::fill(), NLMISC::CMemStream::increaseBufferIfNecessary(), NLMISC::CBitMemStream::increaseBufferIfNecessary(), NLMISC::CBitMemStream::internalSerial(), NLMISC::CBitMemStream::invert(), NLMISC::CBitMemStream::resetBufPos(), NLMISC::CMemStream::serialBuffer(), NLMISC::CBitMemStream::serialPoke(), NLMISC::CMemStream::serialSeparatedBufferIn(), NLMISC::CMemStream::serialSeparatedBufferOut(), and NLMISC::CMemStream::size().
| TBuffer& NLMISC::CMemStreamBuffer::getBufferWrite | ( | ) | [inline] |
Return a write accessor to the buffer, create acopy it if more than one CMemStreamBuffer reference then buffer.
Definition at line 92 of file mem_stream.h.
References _SharedBuffer.
Referenced by NLMISC::CMemStream::bufferToFill(), NLMISC::CMemStream::clear(), NLMISC::CMemStream::CMemStream(), NLMISC::CMemStream::fastSerial(), NLMISC::CMemStream::fastWrite(), NLMISC::CMemStream::fill(), NLMISC::CMemStream::increaseBufferIfNecessary(), NLMISC::CBitMemStream::increaseBufferIfNecessary(), NLMISC::CBitMemStream::internalSerial(), NLMISC::CMemStream::invert(), NLMISC::CMemStream::poke(), NLMISC::CBitMemStream::prepareNextByte(), NLMISC::CBitMemStream::resetBufPos(), NLMISC::CMemStream::resize(), NLMISC::CMemStream::serialBuffer(), NLMISC::CBitMemStream::serialPoke(), and NLMISC::CMemStream::serialSeparatedBufferOut().
| void NLMISC::CMemStreamBuffer::swap | ( | CMemStreamBuffer & | other | ) | [inline] |
Exchange the buffer of two CMemStreamBuffer (just swap memory pointer).
Definition at line 103 of file mem_stream.h.
References _SharedBuffer, and Pos.
Referenced by NLMISC::CMemStream::swap().
Definition at line 69 of file mem_stream.h.
Referenced by CMemStreamBuffer(), getBuffer(), getBufferWrite(), and swap().
uint32 NLMISC::CMemStreamBuffer::Pos [mutable] |
Definition at line 73 of file mem_stream.h.
Referenced by NLMISC::CMemStream::bufferToFill(), NLMISC::CMemStream::clear(), NLMISC::CMemStream::CMemStream(), CMemStreamBuffer(), NLMISC::CBitMemStream::displayStream(), NLMISC::CMemStream::fastRead(), NLMISC::CMemStream::fastSerial(), NLMISC::CMemStream::fastWrite(), NLMISC::CMemStream::fill(), NLMISC::CMemStream::getPos(), NLMISC::CBitMemStream::getPosInBit(), NLMISC::CBitMemStream::getSerialItem(), NLMISC::CMemStream::increaseBufferIfNecessary(), NLMISC::CBitMemStream::increaseBufferIfNecessary(), NLMISC::CBitMemStream::internalSerial(), NLMISC::CMemStream::invert(), NLMISC::CBitMemStream::invert(), NLMISC::CMemStream::lengthS(), NLMISC::CBitMemStream::pointNextByte(), NLMISC::CBitMemStream::poke(), NLMISC::CMemStream::poke(), NLMISC::CBitMemStream::pokeBits(), NLMISC::CBitMemStream::prepareNextByte(), NLMISC::CMemStream::reserve(), NLMISC::CMemStream::resetBufPos(), NLMISC::CBitMemStream::resetBufPos(), NLMISC::CMemStream::serialBuffer(), NLMISC::CBitMemStream::serialPoke(), NLMISC::CMemStream::serialSeparatedBufferIn(), NLMISC::CMemStream::serialSeparatedBufferOut(), and swap().
1.6.1