#include <bit_mem_stream.h>
Inheritance diagram for NLMISC::CBitMemStream:
How output mode works: In CMemStream, _BufPos points to the end of the stream, where to write new data. In CBitMemStream, _BufPos points to the last byte of the stream, where to write new data. Then _FreeBits tells the number of bits not used in this byte (i.e. (8-_FreeBits) is the number of bits already filled inside this byte). The minimum buffer size is 1: when nothing has been written yet, the position is at beginning and _FreeBits is 8.
How input mode works: Same as in CMemStream, but some bits may be free in the last byte (the information about how many is not stored in the CBitMemStream object, the reader needs to know the format of the data it reads).
Nevrax France
Definition at line 356 of file bit_mem_stream.h.
Seek fonctionnality | |
enum | TSeekOrigin { begin, current, end } |
virtual std::string | getStreamName () const |
Public Types | |
Public Member Functions | |
const uint8 * | buffer () const |
uint8 * | bufferToFill (uint32 msgsize) |
See doc in CMemStream::bufferToFill(). | |
CBitMemStream (const CBitMemStream &other) | |
Copy constructor. | |
CBitMemStream (bool inputStream=false, uint32 defaultcapacity=32) | |
Constructor. | |
virtual void | clear () |
Clears the message. | |
void | displayLastBits (sint nbits, sint bitpos=-1, NLMISC::CLog *log=NLMISC::DebugLog) |
Display the bits of the stream just before the specified bitpos (or current pos if -1). | |
void | displayStream (const char *title="", CLog *log=NLMISC::DebugLog) |
Returns the stream as a string with 0 and 1. | |
template<class T> void | fastRead (T &value) |
template<class T> void | fastSerial (T &val) |
template<class T> void | fastWrite (const T &value) |
void | fill (const uint8 *srcbuf, uint32 len) |
See doc in CMemStream::fill(). | |
sint32 | getPos () const |
Const and not-virtual getPos(), for direct use. Caution: should not be overloaded in a child class. | |
virtual sint32 | getPos () throw (EStream) |
sint32 | getPosInBit () const |
Returns the number of bit from the beginning of the buffer (in bit). | |
std::string | getSerialItem (const TBMSSerialInfo &serialItem) |
Return a string showing the serial item. | |
void | increaseBufferIfNecessary (uint32 len) |
Increase the buffer size if 'len' can't enter, otherwise, do nothing. | |
virtual void | invert () |
Transforms the message from input to output or from output to input. | |
bool | isReading () const |
Is this stream a Read/Input stream? | |
bool | isXML () const |
virtual uint32 | length () const |
CBitMemStream & | operator= (const CBitMemStream &other) |
Assignment operator. | |
template<class T> void | poke (T value, sint32 pos) |
void | poke (uint32 value, uint bitpos, uint nbits) |
void | pokeBits (const NLMISC::CBitSet &bitfield, uint bitpos) |
void | readBits (NLMISC::CBitSet &bitfield) |
sint32 | reserve (uint len) |
void | reserveBits (uint nbits) |
void | resetBufPos () |
void | resetPtrTable () |
Force to reset the ptr table. | |
void | resize (uint32 size) |
Resize the buffer. | |
virtual bool | seek (sint32 offset, TSeekOrigin origin) throw (EStream) |
template<class T0, class T1, class T2, class T3, class T4, class T5> void | serial (T0 &a, T1 &b, T2 &c, T3 &d, T4 &e, T5 &f) |
template<class T0, class T1, class T2, class T3, class T4> void | serial (T0 &a, T1 &b, T2 &c, T3 &d, T4 &e) |
template<class T0, class T1, class T2, class T3> void | serial (T0 &a, T1 &b, T2 &c, T3 &d) |
template<class T0, class T1, class T2> void | serial (T0 &a, T1 &b, T2 &c) |
template<class T0, class T1> void | serial (T0 &a, T1 &b) |
template<class T> void | serial (T &obj) |
Template serialisation (should take the one from IStream). | |
void | serial (uint64 &value, uint nbits) |
void | serial (uint32 &value, uint nbits, bool resetvalue=true) |
virtual void | serialBit (bool &bit) |
Serialize one bit. | |
virtual void | serialBuffer (uint8 *buf, uint len) |
Serialize a buffer. | |
virtual void | serialBufferWithSize (uint8 *buf, uint32 len) |
virtual void | serialCont (std::vector< bool > &cont) |
Specialisation of serialCont() for vector<bool>. | |
virtual void | serialCont (std::vector< sint8 > &cont) |
Specialisation of serialCont() for vector<sint8>. | |
virtual void | serialCont (std::vector< uint8 > &cont) |
Specialisation of serialCont() for vector<uint8>. | |
template<class K, class T> void | serialCont (std::multimap< K, T > &cont) |
Specialisation of serialCont() for vector<bool>. | |
template<class K, class T> void | serialCont (std::map< K, T > &cont) |
Specialisation of serialCont() for vector<bool>. | |
template<class T> void | serialCont (std::multiset< T > &cont) |
Specialisation of serialCont() for vector<bool>. | |
template<class T> void | serialCont (std::set< T > &cont) |
Specialisation of serialCont() for vector<bool>. | |
template<class T> void | serialCont (std::deque< T > &cont) |
Specialisation of serialCont() for vector<bool>. | |
template<class T> void | serialCont (std::list< T > &cont) |
Specialisation of serialCont() for vector<bool>. | |
template<class T> void | serialCont (std::vector< T > &cont) |
template<class T> void | serialEnum (T &em) |
Template enum serialisation. Serialized as a sint32. | |
virtual void | serialMemStream (CMemStream &b) |
Serial memstream, bitmemstream... | |
void | setStringMode (bool stringmode) |
Set string mode. | |
uint32 | size () const |
Returns the size of the buffer (can be greater than the length, especially in output mode). | |
bool | stringMode () const |
Return string mode. | |
Base type serialisation. | |
Those method are a specialisation of template method "void serial(T&)". | |
virtual void | serial (CBitMemStream &b) |
virtual void | serial (ucstring &b) |
virtual void | serial (std::string &b) |
virtual void | serial (char &b) |
virtual void | serial (bool &b) |
virtual void | serial (double &b) |
virtual void | serial (float &b) |
virtual void | serial (sint64 &b) |
virtual void | serial (uint64 &b) |
virtual void | serial (sint32 &b) |
virtual void | serial (uint32 &b) |
virtual void | serial (sint16 &b) |
virtual void | serial (uint16 &b) |
virtual void | serial (sint8 &b) |
virtual void | serial (uint8 &b) |
virtual void | serialMemStream (CBitMemStream &b) |
Static Public Member Functions | |
void | getVersionException (bool &throwOnOlder, bool &throwOnNewer) |
void | setVersionException (bool throwOnOlder, bool throwOnNewer) |
Protected Member Functions | |
void | increaseBufferIfNecessary () |
void | internalSerial (uint64 &value, uint nbits) |
void | internalSerial (uint32 &value, uint nbits, bool resetvalue=true) |
uint32 | lengthR () const |
uint32 | lengthS () const |
Returns the serialized length (number of bytes written or read). | |
void | pointNextByte () |
void | prepareNextByte () |
void | serialPoke (uint32 value, uint nbits) |
template<class T> void | serialVector (T &cont) |
Protected Attributes | |
CObjectVector< uint8, false > | _Buffer |
uint8 * | _BufPos |
CBMSDbgInfo | _DbgInfo |
Debug details about what was serialised. | |
uint32 | _DefaultCapacity |
uint | _FreeBits |
Number of bits unused at the current pos. If 8, means the current pos if full and we need to increment the pos! | |
bool | _StringMode |
|
Parameters for seek(). begin seek from the begining of the stream. current seek from the current location of the stream pointer. end seek from the end of the stream. Definition at line 549 of file stream.h.
|
|
Constructor.
Definition at line 51 of file bit_mem_stream.cpp. References resetBufPos(), and uint32.
00051 : 00052 CMemStream( inputStream, false, defaultcapacity ), 00053 _FreeBits( 0 ) 00054 { 00055 resetBufPos(); 00056 } |
|
Copy constructor.
Definition at line 62 of file bit_mem_stream.cpp.
00062 : 00063 CMemStream( other ), 00064 _FreeBits( other._FreeBits ), 00065 _DbgInfo( other._DbgInfo ) 00066 { 00067 } |
|
Returns a pointer to the message buffer (read only) Returns NULL if the buffer is empty Definition at line 238 of file mem_stream.h. References NLMISC::CObjectVector< uint8, false >::getPtr(), and uint8. Referenced by NLNET::CMessage::assignFromSubMessage(), NLMISC::displayBitStream(), NLNET::CMessage::extractStreamFromPos(), NLNET::TMessageRecord::serial(), NLMISC::IStream::serialMemStream(), serialMemStream(), and NLNET::CMessage::serialMessage().
00239 { 00240 return _Buffer.getPtr(); 00241 /* if ( _Buffer.empty() ) 00242 { 00243 return NULL; 00244 } 00245 else 00246 { 00247 return &(*_Buffer.begin()); 00248 }*/ 00249 } |
|
See doc in CMemStream::bufferToFill().
Reimplemented from NLMISC::CMemStream. Definition at line 460 of file bit_mem_stream.h. References _DbgInfo, _FreeBits, NLMISC::CBMSDbgInfo::clear(), uint32, and uint8. Referenced by serialMemStream().
|
|
Clears the message.
Reimplemented from NLMISC::CMemStream. Definition at line 436 of file bit_mem_stream.h. References resetBufPos().
00437 { 00438 CMemStream::clear(); 00439 resetBufPos(); 00440 } |
|
Display the bits of the stream just before the specified bitpos (or current pos if -1).
Definition at line 641 of file bit_mem_stream.cpp. References NLMISC::displayBitStream(), getPosInBit(), and sint.
00642 { 00643 if ( bitpos == -1 ) 00644 bitpos = getPosInBit(); 00645 displayBitStream( *this, max(bitpos-nbits, 0), bitpos-1, log ); 00646 } |
|
Returns the stream as a string with 0 and 1.
Definition at line 673 of file bit_mem_stream.cpp. References _DbgInfo, _FreeBits, NLMISC::CBMSDbgInfo::beginEventBrowsing(), NLMISC::CLog::displayNL(), NLMISC::CLog::displayRawNL(), NLMISC::CBMSDbgInfo::endEventBrowsing(), NLMISC::CBMSDbgInfo::getEventIdAtBitPos(), NLMISC::CBMSDbgInfo::getEventLegendAtBitPos(), getPosInBit(), NLMISC::CObjectVector< uint8, false >::getPtr(), NLMISC::IStream::isReading(), nlassert, s, sint, sint32, NLMISC::CObjectVector< uint8, false >::size(), NLMISC::toString(), uint32, and uint8.
00674 { 00675 nlassert( (_BufPos >= _Buffer.getPtr()) && (_BufPos <= _Buffer.getPtr() + _Buffer.size()) ); 00676 00677 // Display title and information 00678 string s = (isReading()?string("I"):string("O")) + string("BMS ") + string(title) + ": "; 00679 string sLegend; 00680 if ( _BufPos == _Buffer.getPtr() ) 00681 { 00682 log->displayNL( (s + "Empty").c_str() ); 00683 return; 00684 } 00685 00686 s += NLMISC::toString( "BitPos=%d Pos=%u FreeBits=%u Size=%u ", getPosInBit(), (uint32)(_BufPos-_Buffer.getPtr()), _FreeBits, _Buffer.size() ); 00687 log->displayNL( s.c_str() ); 00688 s.clear(); 00689 00690 // Display bitstream (output: until _BufPos/_FreeBits; input: whole buffer) 00691 _DbgInfo.beginEventBrowsing(); 00692 sint32 eventId; 00693 uint32 bitpos = 0; 00694 uint8 *p; 00695 uint8 *endPos = isReading() ? (_Buffer.getPtr() + _Buffer.size()) : (_BufPos+1); 00696 for ( p=_Buffer.getPtr(); p!=endPos; ++p ) 00697 { 00698 sint i; 00699 for ( i=7; i!=-1; --i ) 00700 { 00701 //bitpos = (p-_Buffer.getPtr())*8 + (7-i); 00702 if ( bitpos == (uint32)getPosInBit() ) 00703 s += "<P>"; // display the current position 00704 s += _DbgInfo.getEventIdAtBitPos( bitpos, &eventId ); 00705 s += ( ((*p) >> i) & 1 ) ? '1' : '0'; 00706 sLegend += _DbgInfo.getEventLegendAtBitPos( *this, eventId ); 00707 ++bitpos; 00708 } 00709 00710 s += ' '; // a blank char between each byte 00711 if ( bitpos % 64 == 0 ) // limit to 8 bytes per line 00712 { 00713 log->displayRawNL( s.c_str() ); 00714 s.clear(); 00715 } 00716 } 00717 if ( bitpos % 64 != 0 ) 00718 log->displayRawNL( s.c_str() ); 00719 _DbgInfo.endEventBrowsing(); 00720 00721 // Display legend 00722 string::size_type lineStart = 0; 00723 string::size_type crp = sLegend.find( '\n', lineStart ); 00724 while ( crp != string::npos ) 00725 { 00726 log->displayRawNL( sLegend.substr( lineStart, crp-lineStart ).c_str() ); 00727 lineStart = crp + 1; 00728 crp = sLegend.find( '\n', lineStart ); 00729 } 00730 // sLegend ends with a '\n' 00731 } |
|
Definition at line 404 of file mem_stream.h. References NLMISC::CMemStream::_BufPos, NLMISC::CMemStream::length(), NLMISC::CMemStream::lengthS(), and value.
00405 { 00406 //nldebug( "MEMSTREAM: Reading %u-byte value in %p at pos %u", sizeof(value), this, _BufPos - _Buffer.getPtr() ); 00407 // Check that we don't read more than there is to read 00408 if ( lengthS()+sizeof(value) > length() ) // calls virtual length (cf. sub messages) 00409 { 00410 throw EStreamOverflow(); 00411 } 00412 // Serialize in 00413 value = *(T*)_BufPos; 00414 _BufPos += sizeof(value); 00415 } |
|
Definition at line 371 of file mem_stream.h. References NLMISC::CMemStream::_BufPos, NLMISC::CMemStream::increaseBufferIfNecessary(), NLMISC::IStream::isReading(), NLMISC::CMemStream::length(), and NLMISC::CMemStream::lengthS(). Referenced by NLMISC::CMemStream::serial().
00372 { 00373 #ifdef NL_LITTLE_ENDIAN 00374 if(isReading()) 00375 { 00376 // Check that we don't read more than there is to read 00377 // TODO OPTIM we can remove the check if we want to be faster (50ms->43ms for 1 million serial) 00378 if ( lengthS()+sizeof(T) > length() ) // calls virtual length (cf. sub messages) 00379 throw EStreamOverflow(); 00380 // Serialize in 00381 val = *(T*)_BufPos; 00382 } 00383 else 00384 { 00385 increaseBufferIfNecessary (sizeof(T)); 00386 *(T*)_BufPos = val; 00387 } 00388 _BufPos += sizeof (T); 00389 #else // NL_LITTLE_ENDIAN 00390 IStream::serial( val ); 00391 #endif // NL_LITTLE_ENDIAN 00392 } |
|
Definition at line 395 of file mem_stream.h. References NLMISC::CMemStream::_BufPos, NLMISC::CMemStream::increaseBufferIfNecessary(), and value.
00396 { 00397 //nldebug( "MEMSTREAM: Writing %u-byte value in %p at pos %u", sizeof(value), this, _BufPos - _Buffer.getPtr() ); 00398 increaseBufferIfNecessary (sizeof(T)); 00399 *(T*)_BufPos = value; 00400 _BufPos += sizeof (T); 00401 } |
|
See doc in CMemStream::fill().
Reimplemented from NLMISC::CMemStream. Definition at line 452 of file bit_mem_stream.h. References _DbgInfo, _FreeBits, NLMISC::CBMSDbgInfo::clear(), len, uint32, and uint8.
|
|
Const and not-virtual getPos(), for direct use. Caution: should not be overloaded in a child class.
Definition at line 159 of file mem_stream.h. References NLMISC::CMemStream::_BufPos, NLMISC::CObjectVector< uint8, false >::getPtr(), and sint32.
|
|
Get the location of the stream pointer. NB: If the stream doesn't support the seek fonctionnality, it throws ESeekNotSupported. Default implementation: { throw ESeekNotSupported; }
Reimplemented from NLMISC::IStream. Definition at line 153 of file mem_stream.h. References NLMISC::CMemStream::_BufPos, NLMISC::CObjectVector< uint8, false >::getPtr(), and sint32. Referenced by NLNET::CMessage::changeType(), NLNET::CMessage::CMessage(), NLNET::CMessage::getName(), NLNET::CMessage::lockSubMessage(), NLNET::CMessage::readType(), NLNET::CMessage::readTypeAtCurrentPos(), serial(), serialCont(), serialMemStream(), NLNET::CMessage::setType(), and NLNET::CMessage::unlockSubMessage().
|
|
Returns the number of bit from the beginning of the buffer (in bit).
Definition at line 443 of file bit_mem_stream.h. References _FreeBits, NLMISC::CObjectVector< uint8, false >::getPtr(), and sint32. Referenced by displayLastBits(), displayStream(), getSerialItem(), internalSerial(), poke(), pokeBits(), readBits(), reserveBits(), serial(), serialBit(), serialBuffer(), serialCont(), and serialMemStream().
|
|
Return a string showing the serial item.
Definition at line 737 of file bit_mem_stream.cpp. References _FreeBits, NLMISC::TBMSSerialInfo::BitPos, NLMISC::TBMSSerialInfo::BitSize, getPosInBit(), NLMISC::CObjectVector< uint8, false >::getPtr(), NLMISC::IStream::isReading(), len, NLMISC::CMemStream::lengthR(), NL_I64, readBits(), NLMISC::CBitSet::resize(), s, serial(), serialBit(), serialBuffer(), NLMISC::IStream::setInOut(), NLMISC::CBitSet::toString(), NLMISC::toString(), NLMISC::TBMSSerialInfo::Type, uint, uint32, uint64, and uint8. Referenced by NLMISC::CBMSDbgInfo::getEventLegendAtBitPos().
00738 { 00739 // Save the current pointers of the stream, and make them point to the required position 00740 uint savedFreeBits = _FreeBits; 00741 uint bytepos = serialItem.BitPos >> 3; 00742 _FreeBits = 8 - (serialItem.BitPos - (bytepos << 3)); 00743 uint8 *savedBufPos = _BufPos; 00744 _BufPos = _Buffer.getPtr() + bytepos; 00745 00746 bool wasOutput = false;; 00747 if ( ! isReading() ) 00748 { 00749 setInOut( true ); // lighter than invert() 00750 wasOutput = true; 00751 } 00752 00753 // Read and format string 00754 string s; 00755 if ( getPosInBit() + serialItem.BitSize > lengthR() * 8 ) 00756 { 00757 s = "<Stream Overflow>"; 00758 } 00759 else 00760 { 00761 switch ( serialItem.Type ) 00762 { 00763 case TBMSSerialInfo::B: 00764 { 00765 bool b; 00766 serialBit( b ); 00767 s = NLMISC::toString( "%s", b?"TRUE":"FALSE" ); 00768 break; 00769 } 00770 case TBMSSerialInfo::U: // no distinction with signed int! 00771 { 00772 uint32 u; 00773 serial( u, serialItem.BitSize ); 00774 s = NLMISC::toString( "%u", u ); 00775 break; 00776 } 00777 case TBMSSerialInfo::U64: // no distinction with signed int64! 00778 { 00779 uint64 u; 00780 serial( u, serialItem.BitSize ); 00781 s = NLMISC::toString( "%"NL_I64"u", u ); 00782 break; 00783 } 00784 case TBMSSerialInfo::F: // what about double? 00785 { 00786 float f; 00787 serial( f ); 00788 s = NLMISC::toString( "%g", f ); 00789 break; 00790 } 00791 case TBMSSerialInfo::BF: 00792 { 00793 CBitSet bs; 00794 bs.resize( serialItem.BitSize ); 00795 readBits( bs ); 00796 s = bs.toString(); 00797 break; 00798 } 00799 case TBMSSerialInfo::Buffer: 00800 { 00801 uint32 len = serialItem.BitSize / 8; 00802 s.resize( len + 2 ); 00803 if ( len != 0 ) 00804 { 00805 serialBuffer( &((uint8&)(s[1])), len ); 00806 string::size_type p; 00807 for ( p=1; p!=len+1; ++p ) 00808 { 00809 if ( ! isalnum(s[p]) ) 00810 s[p] = '?'; // remove end-of-c_string 00811 } 00812 } 00813 s[0] = '['; 00814 s[len+1] = ']'; 00815 break; 00816 } 00817 default: 00818 break; 00819 } 00820 } 00821 00822 // Restore the current pointers 00823 if ( wasOutput ) 00824 { 00825 setInOut( false ); 00826 } 00827 00828 _FreeBits = savedFreeBits; 00829 _BufPos = savedBufPos; 00830 00831 return s; 00832 } |
|
Get a name for this stream. maybe a fileName if FileStream. Default is to return "". Reimplemented in NLMISC::CIFile, and NLMISC::COFile. Definition at line 420 of file stream.cpp. Referenced by NLMISC::EStream::EStream().
00421 { 00422 return ""; 00423 } |
|
Get the behavior of IStream regarding input stream that are older/newer than the class.
Definition at line 78 of file stream.cpp. References NLMISC::IStream::_ThrowOnNewer, and NLMISC::IStream::_ThrowOnOlder.
00079 { 00080 throwOnOlder=_ThrowOnOlder; 00081 throwOnNewer=_ThrowOnNewer; 00082 } |
|
Increase the buffer size if 'len' can't enter, otherwise, do nothing.
Definition at line 358 of file mem_stream.h. References NLMISC::CMemStream::_BufPos, NLMISC::CObjectVector< uint8, false >::getPtr(), len, NLMISC::CObjectVector< uint8, false >::resize(), NLMISC::CObjectVector< uint8, false >::size(), and uint32. Referenced by NLMISC::CMemStream::fastSerial(), NLMISC::CMemStream::fastWrite(), NLMISC::CMemStream::reserve(), and NLMISC::CMemStream::serialBuffer().
00359 { 00360 uint32 oldBufferSize = _Buffer.size(); 00361 if (_BufPos - _Buffer.getPtr() + len > oldBufferSize) 00362 { 00363 // need to increase the buffer size 00364 uint32 pos = _BufPos - _Buffer.getPtr(); 00365 _Buffer.resize(oldBufferSize*2 + len); 00366 _BufPos = _Buffer.getPtr() + pos; 00367 } 00368 } |
|
Increase the size of the buffer if necessary (outpout bit stream) Preconditions:
Postconditions: Definition at line 730 of file bit_mem_stream.h. References NLMISC::CObjectVector< uint8, false >::empty(), NLMISC::CObjectVector< uint8, false >::getPtr(), NLMISC::IStream::isReading(), nlassert, NLMISC::CObjectVector< uint8, false >::resize(), NLMISC::CObjectVector< uint8, false >::size(), and uint32. Referenced by prepareNextByte().
00731 { 00732 #ifdef NL_DEBUG 00733 nlassert( (!isReading()) && (!_Buffer.empty()) ); 00734 nlassert( _BufPos <= _Buffer.getPtr() + _Buffer.size() ); 00735 #endif 00736 uint32 bytepos = _BufPos - _Buffer.getPtr(); 00737 if ( bytepos == _Buffer.size() ) 00738 { 00739 _Buffer.resize( bytepos * 2 ); 00740 _BufPos = _Buffer.getPtr() + bytepos; // don't change the pos but update pointer (needed because the buffer may have moved when reallocating) 00741 } 00742 } |
|
Helper for serial(uint64,uint) Definition at line 650 of file bit_mem_stream.h. References internalSerial(), NLMISC::IStream::isReading(), uint, uint32, uint64, and value.
00651 { 00652 if ( nbits > 32 ) 00653 { 00654 if ( isReading() ) 00655 { 00656 // Reset and read MSD 00657 uint32 msd = 0; 00658 internalSerial( msd, nbits-32 ); 00659 value = (uint64)msd << 32; 00660 // Reset and read LSD 00661 internalSerial( (uint32&)value, 32 ); 00662 } 00663 else 00664 { 00665 // Write MSD 00666 uint32 msd = (uint32)(value >> 32); 00667 internalSerial( msd, nbits-32 ); 00668 // Write LSD 00669 internalSerial( (uint32&)value, 32 ); 00670 } 00671 } 00672 else 00673 { 00674 if ( isReading() ) 00675 { 00676 // Reset MSB (=0 is faster than value&=0xFFFFFFFF) 00677 value = 0; 00678 } 00679 // Read or write LSB 00680 internalSerial( (uint32&)value, nbits ); 00681 } 00682 } |
|
Helper for serial(uint32,uint) Definition at line 172 of file bit_mem_stream.cpp. References _FreeBits, getPosInBit(), NLMISC::IStream::isReading(), NLMISC::CMemStream::lengthR(), nlassert, prepareNextByte(), uint, uint32, uint8, v, and value. Referenced by internalSerial(), serial(), serialBit(), and serialBuffer().
00173 { 00174 if ( nbits == 0 ) 00175 return; 00176 if ( nbits > 32 ) 00177 throw EMemStream (string("trying to serial ")+NLMISC::toString(nbits)+string(" bits")); 00178 00179 if ( isReading() ) 00180 { 00181 // Check that we don't read more than there is to read 00182 if ( getPosInBit() + nbits > lengthR() * 8 ) 00183 { 00184 //displayStream( "Stream Overflow" ); 00185 throw EStreamOverflow(); 00186 } 00187 00188 if ( resetvalue ) 00189 { 00190 value = 0; 00191 } 00192 00193 // Clear high-order bits after _FreeBits 00194 uint8 v = *_BufPos & ((1 << _FreeBits) - 1); 00195 00196 if ( nbits > _FreeBits ) 00197 { 00198 //nldebug( "Reading byte %u from %u free bits (%u remaining bits)", lengthS(), _FreeBits, nbits ); 00199 value |= (v << (nbits-_FreeBits)); 00200 ++_BufPos; 00201 uint readbits = _FreeBits; 00202 //displayByteBits( *_BufPos, 8, readbits-1, false ); 00203 _FreeBits = 8; 00204 internalSerial( value, nbits - readbits, false ); // read without resetting value 00205 } 00206 else 00207 { 00208 //nlinfo( "Reading last byte %u from %u free bits (%u remaining bits)", lengthS(), _FreeBits, nbits ); 00209 //displayByteBits( *_BufPos, 8, _FreeBits-1, false ); 00210 value |= (v >> (_FreeBits-nbits)); 00211 //displayByteBits( *_BufPos, 8, _FreeBits-1, false ); 00212 _FreeBits -= nbits; 00213 if ( _FreeBits == 0 ) 00214 { 00215 _FreeBits = 8; 00216 ++_BufPos; 00217 } 00218 } 00219 } 00220 else 00221 { 00222 // Clear high-order bits after nbits 00223 //displayDwordBits( value, 32, nbits-1, false ); 00224 00225 //uint32 mask = (-1 >> (32-nbits)); // does not work 00226 uint32 v; 00227 if ( nbits != 32 ) // arg of shl/sal/shr/sal ranges from 0 to 31 00228 { 00229 uint32 mask = (1 << nbits) - 1; 00230 v = value & mask; 00231 } 00232 else 00233 { 00234 v = value; 00235 } 00236 00237 #ifdef NL_DEBUG 00238 // Check that the current byte is prepared 00239 nlassert( ! ((_FreeBits == 8) && (*_BufPos != 0)) ); 00240 #endif 00241 00242 // Set 00243 if ( nbits > _FreeBits ) 00244 { 00245 // Longer than the room in the current byte 00246 //nldebug( "Writing byte %u into %u free bits (%u remaining bits)", lengthS(), _FreeBits, nbits ); 00247 //displayDwordBits( value, 32, nbits-1, false ); 00248 *_BufPos |= (v >> (nbits - _FreeBits)); 00249 uint filledbits = _FreeBits; 00250 //displayByteBits( *_BufPos, 8, filledbits-1, false ); 00251 prepareNextByte(); 00252 internalSerial( v, nbits - filledbits ); 00253 } 00254 else 00255 { 00256 // Shorter or equal 00257 //nldebug( "Writing last byte %u into %u free bits (%u remaining bits)", lengthS(), _FreeBits, nbits ); 00258 //displayByteBits( *_BufPos, 8, 7, false ); 00259 *_BufPos |= (v << (_FreeBits-nbits)); 00260 //displayByteBits( *_BufPos, 8, _FreeBits-1, false ); 00261 _FreeBits -= nbits; 00262 if ( _FreeBits == 0 ) 00263 { 00264 prepareNextByte(); 00265 } 00266 } 00267 } 00268 } |
|
Transforms the message from input to output or from output to input.
Reimplemented from NLMISC::CMemStream. Definition at line 418 of file bit_mem_stream.h. References NLMISC::CObjectVector< uint8, false >::getPtr(), NLMISC::IStream::isReading(), nlassert, and NLMISC::CObjectVector< uint8, false >::size().
00419 { 00420 if ( ! isReading() ) 00421 { 00422 ++_BufPos; // write->read: extend to keep the last byte inside the payload 00423 } 00424 CMemStream::invert(); 00425 if ( ! isReading() ) 00426 { 00427 #ifdef NL_DEBUG 00428 nlassert( _BufPos == _Buffer.getPtr()+_Buffer.size() ); 00429 #endif 00430 --_BufPos; // read->write: set the position on the last byte, not at the end as in CMemStream::invert() 00431 } 00432 // Keep the same _FreeBits 00433 } |
|
|
Definition at line 221 of file stream.h. References NLMISC::IStream::_XML. Referenced by NLMISC::CMemStream::serial().
00221 { return _XML; }
|
|
Returns the length (size) of the message, in bytes. If isReading(), it is the number of bytes that can be read, otherwise it is the number of bytes that have been written (the last byte may not be full, it may have free bits, see also getPosInBit()). Reimplemented from NLMISC::CMemStream. Definition at line 402 of file bit_mem_stream.h. References _FreeBits, NLMISC::IStream::isReading(), NLMISC::CMemStream::lengthR(), NLMISC::CMemStream::lengthS(), and uint32. Referenced by serial(), serialCont(), and serialMemStream().
|
|
Returns the "read" message size (number of bytes to read) Do not use directly, use length() instead in reading mode (which is virtual) Reimplemented in NLNET::CMessage. Definition at line 511 of file mem_stream.h. References NLMISC::CMemStream::size(), and uint32. Referenced by getSerialItem(), internalSerial(), NLMISC::CMemStream::invert(), NLMISC::CMemStream::length(), and length().
00512 { 00513 return size(); 00514 } |
|
Returns the serialized length (number of bytes written or read).
Definition at line 502 of file mem_stream.h. References NLMISC::CMemStream::_BufPos, NLMISC::CObjectVector< uint8, false >::getPtr(), and uint32. Referenced by NLMISC::CMemStream::fastRead(), NLMISC::CMemStream::fastSerial(), NLNET::CMessage::length(), NLMISC::CMemStream::length(), length(), NLMISC::CMemStream::operator=(), NLMISC::CMemStream::serialBuffer(), NLMISC::CStringStream::serialSeparatedBufferIn(), and NLMISC::CMemStream::serialSeparatedBufferIn().
|
|
Assignment operator.
Definition at line 367 of file bit_mem_stream.h. References _DbgInfo, and _FreeBits.
|
|
Point the beginning of the byte after _BufPos Preconditions
Postconditions
Definition at line 710 of file bit_mem_stream.h. References _FreeBits, NLMISC::IStream::isReading(), and nlassert. Referenced by prepareNextByte(), and serialPoke().
|
|
When writing, fill a value previously reserved by reserve() (warning: you MUST have called reserve() with sizeof(T) before poking). Usually it's an alternative to use serialCont with a vector. Example: uint8 counter=0; sint32 counterPos = msgout.reserve( sizeof(counter) ); counter = serialSelectedItems( msgout ); msgout.poke( counter, counterPos ); Definition at line 190 of file mem_stream.h. References NLMISC::CMemStream::_BufPos, NLMISC::CObjectVector< uint8, false >::getPtr(), NLMISC::IStream::isReading(), nlassert, sint32, uint8, and value.
|
|
Definition at line 346 of file bit_mem_stream.cpp. References _DbgInfo, _FreeBits, NLMISC::CBMSDbgInfo::addPoke(), getPosInBit(), NLMISC::CObjectVector< uint8, false >::getPtr(), NLMISC::IStream::isReading(), nlassert, serialPoke(), uint, uint32, uint8, and value.
00347 { 00348 #ifdef NL_DEBUG 00349 nlassert( (nbits <= 32) && (nbits != 0) ); 00350 nlassert( ! isReading() ); 00351 nlassert( bitpos+nbits <= (uint)getPosInBit() ); 00352 #endif 00353 00354 // Save the current pointers of the stream, and make them point to the required position 00355 uint savedFreeBits = _FreeBits; 00356 uint bytepos = bitpos >> 3; 00357 _FreeBits = 8 - (bitpos - (bytepos << 3)); 00358 uint8 *savedBufPos = _BufPos; 00359 _BufPos = _Buffer.getPtr() + bytepos; 00360 00361 // Serial 00362 _DbgInfo.addPoke( bitpos, nbits, TBMSSerialInfo::U ); 00363 serialPoke( value, nbits ); 00364 00365 // Restore the current pointers 00366 _FreeBits = savedFreeBits; 00367 _BufPos = savedBufPos; 00368 } |
|
Rewrite the bitfield at the specified position bitpos of the current output bit stream. The size of the bitfield is *not* written into the stream (unlike serialCont()). Precondition: bitpos+bitfield.size() <= the current length in bit of the stream. See also reserveBits(). Definition at line 375 of file bit_mem_stream.cpp. References _DbgInfo, _FreeBits, NLMISC::CBMSDbgInfo::addPoke(), getPosInBit(), NLMISC::CObjectVector< uint8, false >::getPtr(), NLMISC::CBitSet::getVector(), NLMISC::IStream::isReading(), nlassert, serialPoke(), NLMISC::CBitSet::size(), uint, and uint8.
00376 { 00377 #ifdef NL_DEBUG 00378 nlassert( ! isReading() ); 00379 nlassert( bitpos+bitfield.size() <= (uint)getPosInBit() ); 00380 #endif 00381 00382 // Save the current pointers of the stream, and make them point to the required position 00383 uint savedFreeBits = _FreeBits; 00384 uint bytepos = bitpos >> 3; 00385 _FreeBits = 8 - (bitpos - (bytepos << 3)); 00386 uint8 *savedBufPos = _BufPos; 00387 _BufPos = _Buffer.getPtr() + bytepos; 00388 00389 // Serial 00390 _DbgInfo.addPoke( bitpos, bitfield.size(), TBMSSerialInfo::BF ); 00391 const vector<uint32>& uintVec = bitfield.getVector(); 00392 if ( ! uintVec.empty() ) 00393 { 00394 for ( uint i=0; i<uintVec.size()-1; ++i ) 00395 { 00396 //nldebug( "Bitfield: Poked %u at %d (bitpos %d)", uintVec[i], getPos(), getPosInBit() ); 00397 serialPoke( uintVec[i], 32 ); 00398 } 00399 //nldebug( "Bitfield: Poked %u at %d (bitpos %d)", uintVec.back(), getPos(), getPosInBit() ); 00400 uint remainingBits = bitfield.size() % 32; 00401 if ( remainingBits != 0 ) 00402 serialPoke( uintVec.back(), remainingBits ); 00403 } 00404 00405 // Restore the current pointers 00406 _FreeBits = savedFreeBits; 00407 _BufPos = savedBufPos; 00408 } |
|
Prepare next byte for writing. Preconditions:
Postconditions:
Definition at line 694 of file bit_mem_stream.h. References increaseBufferIfNecessary(), and pointNextByte(). Referenced by internalSerial().
00695 { 00696 pointNextByte(); 00697 increaseBufferIfNecessary(); 00698 *_BufPos = 0; 00699 } |
|
Read bitfield.size() bits from the input stream to fill the bitfield. It means you have to know the size and to resize the bitfield yourself. Definition at line 415 of file bit_mem_stream.cpp. References getPosInBit(), NLMISC::IStream::isReading(), len, nlassert, nldebug, serial(), NLMISC::CBitSet::setUint(), NLMISC::CBitSet::size(), uint, uint32, and v. Referenced by getSerialItem().
00416 { 00417 #ifdef NL_DEBUG 00418 nlassert( isReading() ); 00419 #endif 00420 uint len = bitfield.size(); 00421 if ( len != 0 ) 00422 { 00423 #ifdef LOG_ALL_TRAFFIC 00424 if ( VerboseAllTraffic ) 00425 nldebug( "TRAFFIC/%p/%s: Reading %u bits bitfield at bitpos %d", this, isReading()?"I":"O", len, getPosInBit() ); 00426 #endif 00427 uint i = 0; 00428 uint32 v; 00429 while ( len > 32 ) 00430 { 00431 serial( v, 32 ); 00432 //nldebug( "Bitfield: Read %u at %d", v, _BufPos-_Buffer.getPtr()-4 ); 00433 bitfield.setUint( v, i ); 00434 len -= 32; 00435 ++i; 00436 } 00437 serial( v, len ); 00438 //nldebug( "Bitfield: Read %u at %d", v, _BufPos-_Buffer.getPtr()-4 ); 00439 bitfield.setUint( v, i ); 00440 } 00441 } |
|
When writing, skip 'len' bytes and return the position of the blank space for a future poke(). Warning: this has nothing to do with the semantics of reserve() in std::vector! Definition at line 168 of file mem_stream.h. References NLMISC::CMemStream::_BufPos, NLMISC::CObjectVector< uint8, false >::getPtr(), NLMISC::CMemStream::increaseBufferIfNecessary(), NLMISC::IStream::isReading(), len, sint32, and uint.
|
|
In a output bit stream, serialize nbits bits (no matter their value). Works even if the number of bits to add is larger than 64. See also poke() and pokeBits(). Definition at line 275 of file bit_mem_stream.cpp. References getPosInBit(), NLMISC::IStream::isReading(), nldebug, serial(), uint, uint32, and v.
00276 { 00277 #ifdef LOG_ALL_TRAFFIC 00278 if ( VerboseAllTraffic ) 00279 nldebug( "TRAFFIC/%p/%s: Reserving %u bits at bitpos %d", this, isReading()?"I":"O", nbits, getPosInBit() ); 00280 #endif 00281 00282 uint32 v = 0; 00283 while ( nbits > 32 ) 00284 { 00285 serial( v, 32 ); 00286 nbits -= 32; 00287 } 00288 if ( nbits != 0 ) 00289 serial( v, nbits ); 00290 } |
|
Set the position at the beginning. In output mode, the method ensures the buffer contains at least one blank byte to write to. If you are using the stream only in output mode, you can use this method as a faster version of clear() *if you don't serialize pointers*. _Buffer.resize( 8 ); // at least 8 bytes Reimplemented from NLMISC::CMemStream. Definition at line 382 of file bit_mem_stream.h. References _DbgInfo, _FreeBits, NLMISC::CBMSDbgInfo::clear(), NLMISC::CObjectVector< uint8, false >::empty(), NLMISC::IStream::isReading(), and nlassert. Referenced by CBitMemStream(), clear(), and serialMemStream().
00383 { 00384 // This is ensured in CMemStream::CMemStream() and CMemStream::clear() 00385 //if ( (!isReading()) && _Buffer.empty() ) 00387 nlassert( ! ((!isReading()) && _Buffer.empty()) ); 00388 00389 CMemStream::resetBufPos(); 00390 if ( !isReading() ) 00391 *_BufPos = 0; // partial prepareNextByte() 00392 _FreeBits = 8; 00393 _DbgInfo.clear(); 00394 } |
|
Force to reset the ptr table.
Reimplemented from NLMISC::IStream. Definition at line 352 of file mem_stream.h. Referenced by NLMISC::CMemStream::clear(), NL3D::CParticleSystemShape::flushTextures(), NL3D::CParticleSystemShape::instanciatePS(), and NLMISC::CMemStream::invert().
00352 { IStream::resetPtrTable() ; } |
|
Resize the buffer.
Definition at line 235 of file mem_stream.cpp. References NLMISC::CMemStream::_BufPos, NLMISC::CObjectVector< uint8, false >::getPtr(), NLMISC::CMemStream::length(), NLMISC::CObjectVector< uint8, false >::resize(), size, and uint32.
|
|
Moves the stream pointer to a specified location. Warning: in output mode, seek(end) does not point to the end of the serialized data, but on the end of the whole allocated buffer (see size()). If you seek back and want to return to the end of the serialized data, you have to store the position (a better way is to use reserve()/poke()). NB: If the stream doesn't support the seek fonctionnality, it throws ESeekNotSupported. Default implementation: { throw ESeekNotSupported; }
Reimplemented from NLMISC::IStream. Definition at line 177 of file mem_stream.cpp. References offset, sint, and sint32. Referenced by NLNET::CMessage::changeType(), NLNET::CMessage::CMessage(), NL3D::CParticleSystemShape::flushTextures(), NLNET::CMessage::getName(), NLNET::getNameOfMessageOrTransportClass(), NL3D::CParticleSystemShape::instanciatePS(), NLNET::CMessage::readType(), NLNET::CMessage::readTypeAtCurrentPos(), NLNET::CMessage::serialMessage(), and NLNET::CMessage::unlockSubMessage().
00178 { 00179 switch (origin) 00180 { 00181 case begin: 00182 if (offset > (sint)length()) 00183 return false; 00184 if (offset < 0) 00185 return false; 00186 _BufPos=_Buffer.getPtr()+offset; 00187 break; 00188 case current: 00189 if (getPos ()+offset > (sint)length()) 00190 return false; 00191 if (getPos ()+offset < 0) 00192 return false; 00193 _BufPos+=offset; 00194 break; 00195 case end: 00196 if (offset < -(sint)length()) 00197 return false; 00198 if (offset > 0) 00199 return false; 00200 _BufPos=_Buffer.getPtr()+_Buffer.size()+offset; 00201 break; 00202 } 00203 return true; 00204 } |
|
Reimplemented from NLMISC::IStream. Reimplemented in NLMISC::CStringStream. Definition at line 459 of file mem_stream.h. References NLMISC::CMemStream::serial().
|
|
Reimplemented from NLMISC::IStream. Reimplemented in NLMISC::CStringStream. Definition at line 456 of file mem_stream.h. References NLMISC::CMemStream::serial().
|
|
Reimplemented from NLMISC::IStream. Reimplemented in NLMISC::CStringStream. Definition at line 453 of file mem_stream.h. References NLMISC::CMemStream::serial().
|
|
Reimplemented from NLMISC::IStream. Reimplemented in NLMISC::CStringStream. Definition at line 450 of file mem_stream.h. References NLMISC::CMemStream::serial().
|
|
Reimplemented from NLMISC::IStream. Reimplemented in NLMISC::CStringStream. Definition at line 447 of file mem_stream.h. References NLMISC::CMemStream::serial().
|
|
Definition at line 627 of file bit_mem_stream.h. References serialMemStream().
00627 { serialMemStream(b); } |
|
Reimplemented from NLMISC::CMemStream. Definition at line 508 of file bit_mem_stream.cpp. References getPosInBit(), NLMISC::IStream::isReading(), len, nldebug, NLMISC::SEPARATOR, serial(), serialBuffer(), sint, sint32, and uint8.
00509 { 00510 #ifdef LOG_ALL_TRAFFIC 00511 sint32 bitpos = getPosInBit(); 00512 #endif 00513 00514 if ( _StringMode ) 00515 { 00516 sint32 len=0; 00517 // Read/Write the length. 00518 if(isReading()) 00519 { 00520 serial(len); 00521 b.resize(len); 00522 } 00523 else 00524 { 00525 len= b.size(); 00526 serial(len); 00527 } 00528 // Read/Write the string. 00529 for(sint i=0;i<len;i++) 00530 serialBuffer( (uint8*)&b[i], sizeof( sizeof(b[i]) ) ); 00531 00532 char sep = SEPARATOR; 00533 serialBuffer( (uint8*)&sep, 1 ); 00534 } 00535 else 00536 { 00537 IStream::serial( b ); 00538 } 00539 00540 #ifdef LOG_ALL_TRAFFIC 00541 if ( VerboseAllTraffic ) 00542 nldebug( "TRAFFIC/%p/%s: Ucstring at bitpos %d", this, isReading()?"I":"O", bitpos ); 00543 #endif 00544 00545 } |
|
Reimplemented from NLMISC::CMemStream. Definition at line 467 of file bit_mem_stream.cpp. References NLMISC::CMemStream::getPos(), getPosInBit(), NLMISC::IStream::isReading(), len, length(), nldebug, nlwarning, serial(), serialBuffer(), sint32, uint32, and uint8.
00468 { 00469 #ifdef LOG_ALL_TRAFFIC 00470 sint32 bitpos = getPosInBit(); 00471 #endif 00472 00473 uint32 len=0; 00474 00475 // Serialize length 00476 if ( isReading() ) 00477 { 00478 serial( len ); 00479 if (len > length()-getPos()) 00480 { 00481 nlwarning("BMS: string maximum length reached, perhaps invalid string size (%d)", len); 00482 throw NLMISC::EInvalidDataStream(); 00483 } 00484 b.resize( len ); 00485 } 00486 else 00487 { 00488 len = b.size(); 00489 serial( len ); 00490 } 00491 00492 // Serialize buffer 00493 if ( len != 0 ) 00494 { 00495 serialBuffer( (uint8*)(&*b.begin()), len ); 00496 } 00497 00498 #ifdef LOG_ALL_TRAFFIC 00499 if ( VerboseAllTraffic ) 00500 nldebug( "TRAFFIC/%p/%s: String (size 32+%u*8 bits) at bitpos %d", this, isReading()?"I":"O", len, bitpos ); 00501 #endif 00502 } |
|
Reimplemented from NLMISC::CMemStream. Definition at line 621 of file bit_mem_stream.h. References serialAdapt.
00621 { serialAdapt( b, char ); } |
|
Reimplemented from NLMISC::CMemStream. Definition at line 619 of file bit_mem_stream.h. References serialBit().
00619 { serialBit( b ); } |
|
Reimplemented from NLMISC::CMemStream. Definition at line 618 of file bit_mem_stream.h. References serialAdapt64.
00618 { serialAdapt64( b ); } |
|
Reimplemented from NLMISC::CMemStream. Definition at line 447 of file bit_mem_stream.cpp. References _DbgInfo, NLMISC::CBMSDbgInfo::addSerial(), getPosInBit(), internalSerial(), NLMISC::IStream::isReading(), and uint32.
00448 { 00449 _DbgInfo.addSerial( getPosInBit(), sizeof(b)*8, TBMSSerialInfo::F ); 00450 uint32 uf=0; 00451 if ( isReading() ) 00452 { 00453 internalSerial( uf, sizeof(b)*8 ); 00454 b = *(float*)&uf; 00455 } 00456 else 00457 { 00458 uf = *(uint32*)&b; 00459 internalSerial( uf, sizeof(b)*8 ); 00460 } 00461 } |
|
Reimplemented from NLMISC::CMemStream. Definition at line 616 of file bit_mem_stream.h. References serialAdapt64, and sint64.
00616 { serialAdapt64( b ); } |
|
Reimplemented from NLMISC::CMemStream. Definition at line 615 of file bit_mem_stream.h. References serialAdapt64, and uint64.
00615 { serialAdapt64( b ); } |
|
Reimplemented from NLMISC::CMemStream. Definition at line 614 of file bit_mem_stream.h. References serialAdapt, and sint32.
00614 { serialAdapt( b, sint32 ); } |
|
Reimplemented from NLMISC::CMemStream. Definition at line 613 of file bit_mem_stream.h. References serialAdapt, and uint32.
00613 { serialAdapt( b, uint32 ); } |
|
Reimplemented from NLMISC::CMemStream. Definition at line 612 of file bit_mem_stream.h. References serialAdapt, and sint16.
00612 { serialAdapt( b, sint16 ); } |
|
Reimplemented from NLMISC::CMemStream. Definition at line 611 of file bit_mem_stream.h. References serialAdapt, and uint16.
00611 { serialAdapt( b, uint16 ); } |
|
Reimplemented from NLMISC::CMemStream. Definition at line 610 of file bit_mem_stream.h. References serialAdapt, and sint8.
00610 { serialAdapt( b, sint8 ); } |
|
Reimplemented from NLMISC::CMemStream. Definition at line 609 of file bit_mem_stream.h. References serialAdapt, and uint8.
00609 { serialAdapt( b, uint8 ); } |
|
Template serialisation (should take the one from IStream).
Reimplemented from NLMISC::CMemStream. Definition at line 534 of file bit_mem_stream.h.
00534 { obj.serial(*this); }
|
|
Serialize only the nbits lower bits of 64-bit value (nbits range: [1..64]) Definition at line 492 of file bit_mem_stream.h. References _DbgInfo, NLMISC::CBMSDbgInfo::addSerial(), getPosInBit(), internalSerial(), uint, uint64, and value.
00493 { 00494 _DbgInfo.addSerial( getPosInBit(), nbits, TBMSSerialInfo::U64 ); 00495 internalSerial( value, nbits ); 00496 } |
|
Serialize only the nbits lower bits of value (nbits range: [1..32]) When using this method, always leave resetvalue to true. Definition at line 483 of file bit_mem_stream.h. References _DbgInfo, NLMISC::CBMSDbgInfo::addSerial(), getPosInBit(), internalSerial(), uint, uint32, and value. Referenced by getSerialItem(), readBits(), reserveBits(), serial(), serialCont(), and serialMemStream().
00484 { 00485 _DbgInfo.addSerial( getPosInBit(), nbits, TBMSSerialInfo::U ); 00486 internalSerial( value, nbits, resetvalue ); 00487 } |
|
Serialize one bit.
Reimplemented from NLMISC::CMemStream. Definition at line 100 of file bit_mem_stream.cpp. References _DbgInfo, NLMISC::CBMSDbgInfo::addSerial(), getPosInBit(), internalSerial(), NLMISC::IStream::isReading(), and uint32. Referenced by getSerialItem(), serial(), and serialCont().
00101 { 00102 _DbgInfo.addSerial( getPosInBit(), 1, TBMSSerialInfo::B ); 00103 uint32 ubit=0; 00104 if ( isReading() ) 00105 { 00106 internalSerial( ubit, 1 ); 00107 bit = ( ubit!=0 ); 00108 } 00109 else 00110 { 00111 ubit = bit; 00112 internalSerial( ubit, 1 ); 00113 } 00114 } |
|
Serialisation of bitfield <=16 bits.
Definition at line 332 of file stream_inline.h. References NLMISC::IStream::serial(), and uint16.
00333 { 00334 serial(bf); 00335 return bf; 00336 } |
|
Serialisation of bitfield <=32 bits.
Definition at line 338 of file stream_inline.h. References NLMISC::IStream::serial(), and uint32.
00339 { 00340 serial(bf); 00341 return bf; 00342 } |
|
Serialisation of bitfield <=8 bits.
Definition at line 326 of file stream_inline.h. References NLMISC::IStream::serial(), and uint8. Referenced by NL3D::CMaterial::CTexEnv::serial().
00327 { 00328 serial(bf); 00329 return bf; 00330 } |
|
Serialize a buffer.
Reimplemented from NLMISC::CMemStream. Definition at line 73 of file bit_mem_stream.cpp. References _DbgInfo, NLMISC::CBMSDbgInfo::addSerial(), getPosInBit(), internalSerial(), NLMISC::IStream::isReading(), len, uint, uint32, uint8, and v. Referenced by getSerialItem(), serial(), and serialMemStream().
00074 { 00075 _DbgInfo.addSerial( getPosInBit(), len*8, TBMSSerialInfo::Buffer ); 00076 uint i; 00077 uint32 v; 00078 if ( isReading() ) 00079 { 00080 for ( i=0; i!=len; ++i ) 00081 { 00082 internalSerial( v, 8 ); 00083 buf[i] = (uint8)v; 00084 } 00085 } 00086 else 00087 { 00088 for ( i=0; i!=len; ++i ) 00089 { 00090 v = (uint32)buf[i]; 00091 internalSerial( v, 8 ); 00092 } 00093 } 00094 } |
|
This method first serializes the size of the buffer and after the buffer itself, it enables the possibility to serial with a serialCont() on the other side. Definition at line 877 of file stream.h. References len, NLMISC::IStream::serial(), NLMISC::IStream::serialBuffer(), uint32, and uint8.
00878 { 00879 serial (len); 00880 serialBuffer (buf, len); 00881 } |
|
Serialize a check value. An object can stream a check value to check integrity or format of filed or streamed data. Just call serial check with a const value. Write will serial the value. Read will check the value is the same. If it is not, it will throw EInvalidDataStream exception. NB: The type of the value must implement an operator == and must be serializable.
Definition at line 520 of file stream.h. References NLMISC::IStream::isReading(), NLMISC::IStream::serial(), value, NLMISC::IStream::xmlPop(), and NLMISC::IStream::xmlPush(). Referenced by NLNET::cbPacsAnswer(), NLNET::CPacsClient::initMessage(), loadForm(), NLLIGO::CZoneRegion::serial(), NLLIGO::CZoneBankElement::serial(), NL3D::CZone::serial(), NL3D::CVegetableShape::serial(), NL3D::CSkeletonWeight::serial(), NL3D::CInstanceGroup::serial(), NL3D::CLodCharacterShape::serial(), NL3D::CLodCharacterShapeBuild::serial(), NL3D::CAnimationSet::serial(), and NL3D::CAnimation::serial().
00521 { 00522 // Open a node 00523 xmlPush ("CHECK"); 00524 00525 if (isReading()) 00526 { 00527 T read; 00528 serial (read); 00529 if (read!=value) 00530 throw EInvalidDataStream(*this); 00531 } 00532 else 00533 { 00534 serial (const_cast<T&>(value)); 00535 } 00536 00537 // Close the node 00538 xmlPop (); 00539 } |
|
|
Specialisation of serialCont() for vector<bool>.
Reimplemented from NLMISC::CMemStream. Definition at line 591 of file bit_mem_stream.cpp. References NLMISC::contReset(), NLMISC::CMemStream::getPos(), getPosInBit(), NLMISC::IStream::isReading(), len, length(), nldebug, nlwarning, serial(), serialBit(), sint, sint32, and v.
00592 { 00593 #ifdef LOG_ALL_TRAFFIC 00594 sint32 bitpos = getPosInBit(); 00595 #endif 00596 00597 sint32 len=0; 00598 if(isReading()) 00599 { 00600 serial(len); 00601 if (len/8 > (sint32)(length()-getPos())) 00602 { 00603 nlwarning("BMS: stl container maximum length reached, perhaps invalid container size (%d)", len); 00604 throw NLMISC::EInvalidDataStream(); 00605 } 00606 // special version for vector: adjut good size. 00607 contReset(cont); 00608 cont.reserve(len); 00609 00610 for(sint i=0;i<len;i++) 00611 { 00612 bool v; 00613 serialBit(v); 00614 cont.insert(cont.end(), v); 00615 } 00616 } 00617 else 00618 { 00619 len= cont.size(); 00620 serial(len); 00621 00622 std::vector<bool>::iterator it= cont.begin(); 00623 for(sint i=0;i<len;i++, it++) 00624 { 00625 bool b = *it; 00626 serialBit( b ); 00627 } 00628 } 00629 00630 #ifdef LOG_ALL_TRAFFIC 00631 if ( VerboseAllTraffic ) 00632 nldebug( "TRAFFIC/%p/%s: Container (header: 32 bits) at bitpos %d", this, isReading()?"I":"O", bitpos ); 00633 #endif 00634 00635 } |
|
Specialisation of serialCont() for vector<sint8>.
Reimplemented from NLMISC::CMemStream. Definition at line 636 of file bit_mem_stream.h. References NLMISC::IStream::serialVector().
00636 { serialVector(cont); } |
|
Specialisation of serialCont() for vector<uint8>.
Reimplemented from NLMISC::CMemStream. Definition at line 634 of file bit_mem_stream.h. References NLMISC::IStream::serialVector().
00634 { serialVector(cont); } |
|
Specialisation of serialCont() for vector<bool>.
Reimplemented from NLMISC::CMemStream. Definition at line 550 of file bit_mem_stream.h.
00550 {CMemStream::serialCont(cont);} |
|
Specialisation of serialCont() for vector<bool>.
Reimplemented from NLMISC::CMemStream. Definition at line 548 of file bit_mem_stream.h.
00548 {CMemStream::serialCont(cont);} |
|
Specialisation of serialCont() for vector<bool>.
Reimplemented from NLMISC::CMemStream. Definition at line 546 of file bit_mem_stream.h.
00546 {CMemStream::serialCont(cont);} |
|
Specialisation of serialCont() for vector<bool>.
Reimplemented from NLMISC::CMemStream. Definition at line 544 of file bit_mem_stream.h.
00544 {CMemStream::serialCont(cont);} |
|
Specialisation of serialCont() for vector<bool>.
Reimplemented from NLMISC::CMemStream. Definition at line 542 of file bit_mem_stream.h.
00542 {CMemStream::serialCont(cont);} |
|
Specialisation of serialCont() for vector<bool>.
Reimplemented from NLMISC::CMemStream. Definition at line 540 of file bit_mem_stream.h.
00540 {CMemStream::serialCont(cont);} |
|
Reimplemented from NLMISC::CMemStream. Definition at line 538 of file bit_mem_stream.h.
00538 {CMemStream::serialCont(cont);} |
|
Serialize a check value. An object can stream a check value to check integrity or format of filed or streamed data. Just call serial check with a const value. Write will serial the value. Read will check the value is the same. If it is not, it will throw EInvalidDataStream exception. NB: The type of the value must implement an operator == and must be serializable.
Definition at line 379 of file stream.h. References NLMISC::IStream::serialSTLContPolyPtr().
00379 {serialSTLContPolyPtr(cont);} |
|
Serialize a check value. An object can stream a check value to check integrity or format of filed or streamed data. Just call serial check with a const value. Write will serial the value. Read will check the value is the same. If it is not, it will throw EInvalidDataStream exception. NB: The type of the value must implement an operator == and must be serializable.
Definition at line 377 of file stream.h. References NLMISC::IStream::serialSTLContPolyPtr().
00377 {serialSTLContPolyPtr(cont);} |
|
Serialize a check value. An object can stream a check value to check integrity or format of filed or streamed data. Just call serial check with a const value. Write will serial the value. Read will check the value is the same. If it is not, it will throw EInvalidDataStream exception. NB: The type of the value must implement an operator == and must be serializable.
Definition at line 375 of file stream.h. References NLMISC::IStream::serialSTLContPolyPtr().
00375 {serialSTLContPolyPtr(cont);} |
|
Serialize a check value. An object can stream a check value to check integrity or format of filed or streamed data. Just call serial check with a const value. Write will serial the value. Read will check the value is the same. If it is not, it will throw EInvalidDataStream exception. NB: The type of the value must implement an operator == and must be serializable.
Definition at line 373 of file stream.h. References NLMISC::IStream::serialSTLContPolyPtr().
00373 {serialSTLContPolyPtr(cont);} |
|
Serialize a check value. An object can stream a check value to check integrity or format of filed or streamed data. Just call serial check with a const value. Write will serial the value. Read will check the value is the same. If it is not, it will throw EInvalidDataStream exception. NB: The type of the value must implement an operator == and must be serializable.
Definition at line 371 of file stream.h. References NLMISC::IStream::serialVectorPolyPtr(). Referenced by NL3D::CAnimation::serial().
00371 {serialVectorPolyPtr(cont);} |
|
Definition at line 362 of file stream.h. References NLMISC::IStream::serialSTLContPtr().
00362 {serialSTLContPtr(cont);} |
|
Definition at line 360 of file stream.h. References NLMISC::IStream::serialSTLContPtr().
00360 {serialSTLContPtr(cont);} |
|
Definition at line 358 of file stream.h. References NLMISC::IStream::serialSTLContPtr().
00358 {serialSTLContPtr(cont);} |
|
Definition at line 356 of file stream.h. References NLMISC::IStream::serialSTLContPtr().
00356 {serialSTLContPtr(cont);} |
|
Definition at line 354 of file stream.h. References NLMISC::IStream::serialVectorPtr(). Referenced by NL3D::CAnimationSet::serial().
00354 {serialVectorPtr(cont);} |
|
Template enum serialisation. Serialized as a sint32.
Definition at line 261 of file stream.h. References NLMISC::IStream::isReading(), NLMISC::IStream::serial(), and sint32. Referenced by NLNET::cbTCReceiveOtherSideClass(), NL3D::CVegetableShape::serial(), NL3D::CVegetable::serial(), NLPACS::CRetrieverInstance::serial(), NL3D::CPointLight::serial(), NL3D::CMaterial::serial(), NLPACS::CLocalRetriever::serial(), NLMISC::CSerialCommand::serial(), and NL3D::CAnimationPlaylist::serial().
|
|
Serialisation in hexadecimal.
Reimplemented in NLMISC::CStringStream. Definition at line 929 of file mem_stream.h. References NLMISC::CMemStream::_StringMode, NLMISC::atoihex(), NLMISC::IStream::isReading(), readnumber, uint32, and writenumber. Referenced by NLNET::TMessageRecord::serial().
00930 { 00931 if ( _StringMode ) 00932 { 00933 if ( isReading() ) 00934 { 00935 readnumber( b, uint32, 10, atoihex ); // 4294967295 00936 } 00937 else 00938 { 00939 writenumber( b, "%x", 10 ); 00940 } 00941 } 00942 else 00943 { 00944 IStream::serial( b ); 00945 } 00946 } |
|
Serial memstream, bitmemstream...
Definition at line 436 of file stream.cpp. References NLMISC::CMemStream::buffer(), NLMISC::CMemStream::bufferToFill(), NLMISC::IStream::isReading(), len, NLMISC::CMemStream::length(), NLMISC::CMemStream::resetBufPos(), NLMISC::IStream::serial(), NLMISC::IStream::serialBuffer(), uint32, and uint8.
00437 { 00438 uint32 len=0; 00439 00440 // Serialize length 00441 if ( isReading() ) 00442 { 00443 // fill b with data from this 00444 serial (len); 00445 serialBuffer (b.bufferToFill (len), len); 00446 b.resetBufPos (); 00447 } 00448 else 00449 { 00450 // fill this with data from b 00451 len = b.length(); 00452 00453 serial( len ); 00454 serialBuffer( (uint8*) b.buffer (), len ); 00455 } 00456 } |
|
Definition at line 551 of file bit_mem_stream.cpp. References NLMISC::CMemStream::buffer(), bufferToFill(), NLMISC::CMemStream::getPos(), getPosInBit(), NLMISC::IStream::isReading(), len, length(), nldebug, nlwarning, resetBufPos(), serial(), serialBuffer(), sint32, uint32, and uint8. Referenced by serial().
00552 { 00553 #ifdef LOG_ALL_TRAFFIC 00554 sint32 bitpos = getPosInBit(); 00555 #endif 00556 00557 uint32 len=0; 00558 00559 // Serialize length 00560 if ( isReading() ) 00561 { 00562 // fill b with data from this 00563 serial (len); 00564 if (len > length()-getPos()) 00565 { 00566 nlwarning("BMS: bitmemstream maximum length reached, perhaps invalid bitmemstream size (%d)", len); 00567 throw NLMISC::EInvalidDataStream(); 00568 } 00569 00570 serialBuffer (b.bufferToFill (len), len); 00571 b.resetBufPos (); 00572 } 00573 else 00574 { 00575 // fill this with data from b 00576 len = b.length(); 00577 00578 serial( len ); 00579 serialBuffer( (uint8*) b.buffer (), len ); 00580 } 00581 00582 #ifdef LOG_ALL_TRAFFIC 00583 if ( VerboseAllTraffic ) 00584 nldebug( "TRAFFIC/%p/%s: Sub-bitmemstream (size 32+%u*8 bits) at bitpos %d", this, isReading()?"I":"O", len, bitpos ); 00585 #endif 00586 } |
|
Helper for poke(), to write a value inside an output stream (works because reserveBits sets to 0) Warning: if _FreeBits == 8, increments _BufPos. Definition at line 296 of file bit_mem_stream.cpp. References _FreeBits, NLMISC::CObjectVector< uint8, false >::getPtr(), nlassert, pointNextByte(), NLMISC::CObjectVector< uint8, false >::size(), uint, uint32, v, and value. Referenced by poke(), and pokeBits().
00297 { 00298 uint32 v; 00299 if ( nbits != 32 ) // arg of shl/sal/shr/sal ranges from 0 to 31 00300 { 00301 uint32 mask = (1 << nbits) - 1; 00302 v = value & mask; 00303 } 00304 else 00305 { 00306 v = value; 00307 } 00308 00309 // Set 00310 if ( nbits > _FreeBits ) 00311 { 00312 // Longer than the room in the current byte 00313 //nldebug( "Writing byte %u into %u free bits (%u remaining bits)", lengthS(), _FreeBits, nbits ); 00314 //displayDwordBits( value, 32, nbits-1, false ); 00315 *_BufPos |= (v >> (nbits - _FreeBits)); 00316 uint filledbits = _FreeBits; 00317 //displayByteBits( *_BufPos, 8, filledbits-1, false ); 00318 pointNextByte(); // do not set next byte to 0! 00319 nlassert( _BufPos < _Buffer.getPtr() + _Buffer.size() ); 00320 serialPoke( v, nbits - filledbits ); 00321 } 00322 else 00323 { 00324 // Shorter or equal 00325 //nldebug( "Writing last byte %u into %u free bits (%u remaining bits)", lengthS(), _FreeBits, nbits ); 00326 //displayByteBits( *_BufPos, 8, 7, false ); 00327 *_BufPos |= (v << (_FreeBits-nbits)); 00328 //displayByteBits( *_BufPos, 8, _FreeBits-1, false ); 00329 _FreeBits -= nbits; 00330 if ( _FreeBits == 0 ) 00331 { 00332 pointNextByte(); // do not set next byte to 0! 00333 nlassert( _BufPos < _Buffer.getPtr() + _Buffer.size() ); 00334 } 00335 } 00336 } |
|
Serialize Polymorphic Objet Ptr. Works with NULL pointers. If the same object is found mutliple time in the stream, ONLY ONE instance is written! NB: The ptr is serialised as a uint64 (64 bit compliant).
Definition at line 492 of file stream.h. References NLMISC::IStream::serialIStreamable(). Referenced by NL3D::CAnimationOptimizer::cloneTrack(), NL3D::CMaterial::CLightMap::serial(), NL3D::CMaterial::serial(), NL3D::CMaterialBase::CAnimatedTexture::serial(), NL3D::CMaterial::CLightMap::serial2(), and NLMISC::IStream::serialSTLContLenPolyPtr().
00493 { IStreamable *p=ptr; serialIStreamable(p); ptr= static_cast<T*>(p);} |
|
Serialize Non Polymorphic Objet Ptr. Works with NULL pointers. If the same object is found mutliple time in the stream, ONLY ONE instance is written! NB: The ptr is serialised as a uint64 (64 bit compliant).
Definition at line 390 of file stream.h. References NLMISC::IStream::_IdMap, NLMISC::IStream::_NextSerialPtrId, NLMISC::IStream::isReading(), NLMISC::IStream::ItIdMap, NLMISC::IStream::serial(), uint, uint64, NLMISC::IStream::ValueIdMap, NLMISC::IStream::xmlPop(), NLMISC::IStream::xmlPushBegin(), NLMISC::IStream::xmlPushEnd(), and NLMISC::IStream::xmlSetAttrib(). Referenced by NL3D::CParticleSystemShape::buildFromPS(), NL3D::CParticleSystemShape::flushTextures(), NL3D::CParticleSystemShape::instanciatePS(), and NLMISC::IStream::serialSTLContLenPtr().
00391 { 00392 uint64 node; 00393 00394 // Open the node header 00395 xmlPushBegin ("PTR"); 00396 00397 xmlSetAttrib ("id"); 00398 00399 if(isReading()) 00400 { 00401 serial(node); 00402 00403 // Close the header 00404 xmlPushEnd (); 00405 00406 if(node==0) 00407 ptr=NULL; 00408 else 00409 { 00410 ItIdMap it; 00411 it= _IdMap.find(node); 00412 00413 // Test if object already created/read. 00414 if( it==_IdMap.end() ) 00415 { 00416 // Construct object. 00417 ptr= new T; 00418 if(ptr==NULL) 00419 throw EStream(); 00420 00421 // Insert the node. 00422 _IdMap.insert( ValueIdMap(node, ptr) ); 00423 00424 // Read the object! 00425 serial(*ptr); 00426 } 00427 else 00428 ptr= static_cast<T*>(it->second); 00429 } 00430 } 00431 else 00432 { 00433 if(ptr==NULL) 00434 { 00435 node= 0; 00436 serial(node); 00437 00438 // Close the header 00439 xmlPushEnd (); 00440 } 00441 else 00442 { 00443 ItIdMap it; 00444 it = _IdMap.find((uint64)(uint)ptr); 00445 00446 // Test if object has been already written 00447 if( it==_IdMap.end() ) 00448 { 00449 // Not yet written 00450 00451 // Get the next available ID 00452 node = _NextSerialPtrId++; 00453 00454 // Serial the id 00455 serial(node); 00456 00457 // Insert the pointer in the map with the id 00458 _IdMap.insert( ValueIdMap((uint64)(uint)ptr, (void*)(uint)node) ); 00459 00460 // Close the header 00461 xmlPushEnd (); 00462 00463 // Write the object 00464 serial(*ptr); 00465 } 00466 else 00467 { 00468 // Write only the object id 00469 node = (uint64)(uint)(it->second); 00470 00471 serial(node); 00472 00473 // Close the header 00474 xmlPushEnd (); 00475 } 00476 } 00477 } 00478 00479 // Close the node 00480 xmlPop (); 00481 } |
|
Input: read len bytes at most from the stream until the next separator, and return the number of bytes read. The separator is then skipped.
Reimplemented in NLMISC::CStringStream. Definition at line 307 of file mem_stream.cpp. References NLMISC::CMemStream::_BufPos, NLMISC::CMemStream::_StringMode, NLMISC::CObjectVector< uint8, false >::getPtr(), NLMISC::IStream::isReading(), len, NLMISC::CMemStream::length(), NLMISC::CMemStream::lengthS(), nlassert, NLMISC::SEP_SIZE, NLMISC::SEPARATOR, NLMISC::CObjectVector< uint8, false >::size(), uint, uint32, and uint8.
00308 { 00309 nlassert( _StringMode && isReading() ); 00310 00311 // Check that we don't read more than there is to read 00312 if ( ( _BufPos == _Buffer.getPtr()+_Buffer.size() ) || // we are at the end 00313 ( lengthS()+len+SEP_SIZE > length() ) && (_Buffer[_Buffer.size()-1] != SEPARATOR ) ) // we are before the end // calls virtual length (cf. sub messages) 00314 { 00315 throw EStreamOverflow(); 00316 } 00317 // Serialize in 00318 uint32 i = 0; 00319 while ( (i<len) && (*_BufPos) != SEPARATOR ) 00320 { 00321 *(buf+i) = *_BufPos; 00322 i++; 00323 _BufPos++; 00324 } 00325 // Exceeds len 00326 if ( (*_BufPos) != SEPARATOR ) 00327 { 00328 throw EStreamOverflow(); 00329 } 00330 _BufPos += SEP_SIZE; 00331 return i; 00332 } |
|
Output: writes len bytes from buf into the stream.
Reimplemented in NLMISC::CStringStream. Definition at line 338 of file mem_stream.cpp. References NLMISC::CMemStream::_BufPos, NLMISC::CMemStream::_StringMode, NLMISC::CObjectVector< uint8, false >::getPtr(), NLMISC::IStream::isReading(), len, nlassert, NLMISC::CObjectVector< uint8, false >::resize(), NLMISC::SEP_SIZE, NLMISC::SEPARATOR, NLMISC::CObjectVector< uint8, false >::size(), uint, uint32, and uint8.
00339 { 00340 nlassert( _StringMode && (!isReading()) ); 00341 00342 // Serialize out 00343 uint32 oldBufferSize = _Buffer.size(); 00344 if (_BufPos - _Buffer.getPtr() + (len + SEP_SIZE) > oldBufferSize) 00345 { 00346 // need to increase the buffer size 00347 _Buffer.resize(oldBufferSize*2 + len + SEP_SIZE); 00348 _BufPos = _Buffer.getPtr() + oldBufferSize; 00349 } 00350 00351 CFastMem::memcpy( _BufPos, buf, len ); 00352 _BufPos += len; 00353 *(_BufPos++) = SEPARATOR; 00354 00355 // Serialize out 00356 /* _Buffer.resize( _Buffer.size() + len + SEP_SIZE ); 00357 _BufPos = _Buffer.end() - len - SEP_SIZE; 00358 CFastMem::memcpy( &(*_BufPos), buf, len ); 00359 _Buffer[_Buffer.size()-1] = SEPARATOR; 00360 _BufPos = _Buffer.end(); 00361 */} |
|
special version for serializing a vector. Support up to sint32 length containers. Definition at line 992 of file stream.h. References NLMISC::contReset(), NLMISC::IStream::isReading(), len, NLMISC::IStream::serial(), sint, sint32, NLMISC::IStream::xmlPop(), NLMISC::IStream::xmlPush(), NLMISC::IStream::xmlPushBegin(), NLMISC::IStream::xmlPushEnd(), and NLMISC::IStream::xmlSetAttrib(). Referenced by NLMISC::CStringStream::serialCont(), NLMISC::IStream::serialCont(), and serialCont().
00993 { 00994 typedef typename T::value_type __value_type; 00995 typedef typename T::iterator __iterator; 00996 00997 // Open a node header 00998 xmlPushBegin ("VECTOR"); 00999 01000 // Attrib size 01001 xmlSetAttrib ("size"); 01002 01003 sint32 len=0; 01004 if(isReading()) 01005 { 01006 serial(len); 01007 01008 // Open a node header 01009 xmlPushEnd (); 01010 01011 // special version for vector: adjut good size. 01012 contReset(cont); 01013 cont.resize (len); 01014 01015 // Read the vector 01016 for(sint i=0;i<len;i++) 01017 { 01018 xmlPush ("ELM"); 01019 01020 serial(cont[i]); 01021 01022 xmlPop (); 01023 } 01024 } 01025 else 01026 { 01027 len= cont.size(); 01028 serial(len); 01029 01030 // Close the node header 01031 xmlPushEnd (); 01032 01033 // Write the vector 01034 __iterator it= cont.begin(); 01035 for(sint i=0;i<len;i++, it++) 01036 { 01037 xmlPush ("ELM"); 01038 01039 serial(const_cast<__value_type&>(*it)); 01040 01041 xmlPop (); 01042 } 01043 } 01044 01045 // Close the node 01046 xmlPop (); 01047 } |
|
|
Change, in live, the state of the inputStream. This could be usefull in certain case. The deriver which would want to do such a thing must call this method, and implement his own behavior. In certain case, it should call resetPtrTable() if he want to reset the stream ptr info (maybe always)... Definition at line 413 of file stream.cpp. References NLMISC::IStream::_InputStream. Referenced by getSerialItem(), and NLMISC::CMemStream::invert().
00414 { 00415 _InputStream= inputStream; 00416 } |
|
Set string mode.
Definition at line 113 of file mem_stream.h. References NLMISC::CMemStream::_StringMode. Referenced by NLNET::CMessage::init().
00113 { _StringMode = stringmode; } |
|
Set the behavior of IStream regarding input stream that are older/newer than the class. If throwOnOlder==true, IStream throws a EOlderStream when needed. If throwOnNewer==true, IStream throws a ENewerStream when needed. By default, the behavior is throwOnOlder=false, throwOnNewer=true.
Definition at line 71 of file stream.cpp. References NLMISC::IStream::_ThrowOnNewer, and NLMISC::IStream::_ThrowOnOlder.
00072 { 00073 _ThrowOnOlder=throwOnOlder; 00074 _ThrowOnNewer=throwOnNewer; 00075 } |
|
Set the XML mode is true to enable XML mode else false Definition at line 427 of file stream.cpp. References NLMISC::IStream::_XML. Referenced by NLMISC::COXml::COXml(), and NLMISC::COXml::init().
00428 { 00429 _XML = on; 00430 } |
|
Returns the size of the buffer (can be greater than the length, especially in output mode).
Definition at line 230 of file mem_stream.h. References NLMISC::CObjectVector< uint8, false >::size(), and uint32. Referenced by NLMISC::CMemStream::lengthR().
00231 { 00232 return _Buffer.size(); 00233 } |
|
Return string mode.
Definition at line 116 of file mem_stream.h. References NLMISC::CMemStream::_StringMode. Referenced by NLNET::TMessageRecord::serial(), and NLNET::CInetAddress::serial().
00116 { return _StringMode; } |
|
xmlBreakLine() insert a break line in the XML stream.
Definition at line 794 of file stream.h. References NLMISC::IStream::_XML, and NLMISC::IStream::xmlBreakLineInternal().
00795 { 00796 // XML Mode ? 00797 if (_XML) 00798 { 00799 return xmlBreakLineInternal (); 00800 } 00801 00802 // Return ok 00803 return true; 00804 } |
|
xmlBreakLine implementation
Reimplemented in NLMISC::COXml. Definition at line 845 of file stream.h. Referenced by NLMISC::IStream::xmlBreakLine().
00845 { return true; }; |
|
xmlComment() insert a comment line in the XML stream.
Definition at line 811 of file stream.h. References NLMISC::IStream::_XML, comment(), and NLMISC::IStream::xmlCommentInternal().
00812 { 00813 // XML Mode ? 00814 if (_XML) 00815 { 00816 return xmlCommentInternal (comment); 00817 } 00818 00819 // Return ok 00820 return true; 00821 } |
|
xmlComment implementation
Reimplemented in NLMISC::COXml. Definition at line 848 of file stream.h. Referenced by NLMISC::IStream::xmlComment().
00848 { return true; }; |
|
xmlPop() close the node.
Definition at line 759 of file stream.h. References NLMISC::IStream::_XML, and NLMISC::IStream::xmlPopInternal(). Referenced by NLLIGO::CZoneRegion::serial(), NLLIGO::CZoneBankElement::serial(), NL3D::CZone::serial(), NL3D::CPatch::serial(), NLMISC::CObjectVector< sint8, false >::serial(), NLMISC::COXml::serial(), NLMISC::COXml::serialBuffer(), NLMISC::IStream::serialCheck(), NLMISC::IStream::serialIStreamable(), NLMISC::IStream::serialMap(), NLMISC::IStream::serialMultimap(), NLMISC::IStream::serialPtr(), NLMISC::IStream::serialSTLCont(), NLMISC::IStream::serialSTLContLen(), NLMISC::IStream::serialSTLContPtr(), NLMISC::IStream::serialVector(), NLMISC::IStream::serialVectorPolyPtr(), NLMISC::IStream::serialVectorPtr(), NLMISC::IStream::serialVersion(), and NLMISC::IStream::xmlSerial().
00760 { 00761 // XML Mode ? 00762 if (_XML) 00763 { 00764 return xmlPopInternal (); 00765 } 00766 00767 // Return ok 00768 return true; 00769 } |
|
xmlPop implementation
Reimplemented in NLMISC::COXml. Definition at line 839 of file stream.h. Referenced by NLMISC::IStream::xmlPop().
00839 { return true; }; |
|
Definition at line 701 of file stream.h. References NLMISC::IStream::_XML, res, NLMISC::IStream::xmlPushBeginInternal(), and NLMISC::IStream::xmlPushEndInternal(). Referenced by NLLIGO::CZoneRegion::serial(), NLLIGO::CZoneBankElement::serial(), NL3D::CZone::serial(), NL3D::CPatch::serial(), NLMISC::CObjectVector< sint8, false >::serial(), NLMISC::COXml::serial(), NLMISC::COXml::serialBuffer(), NLMISC::IStream::serialCheck(), NLMISC::IStream::serialMap(), NLMISC::IStream::serialMultimap(), NLMISC::IStream::serialSTLContLen(), NLMISC::IStream::serialVector(), NLMISC::IStream::serialVersion(), and NLMISC::IStream::xmlSerial().
00702 { 00703 // XML Mode ? 00704 if (_XML) 00705 { 00706 // Open the header 00707 bool res=xmlPushBeginInternal (name); 00708 if (res) 00709 // close the header 00710 xmlPushEndInternal (); 00711 // Return the result 00712 return res; 00713 } 00714 00715 // Return ok 00716 return true; 00717 } |
|
xmlBreakLine() insert a break line in the XML stream.
Definition at line 725 of file stream.h. References NLMISC::IStream::_XML, and NLMISC::IStream::xmlPushBeginInternal(). Referenced by NLMISC::CObjectVector< sint8, false >::serial(), NLMISC::IStream::serialIStreamable(), NLMISC::IStream::serialMap(), NLMISC::IStream::serialMultimap(), NLMISC::IStream::serialPtr(), NLMISC::IStream::serialSTLCont(), NLMISC::IStream::serialSTLContPtr(), NLMISC::IStream::serialVector(), NLMISC::IStream::serialVectorPolyPtr(), and NLMISC::IStream::serialVectorPtr().
00726 { 00727 // XML Mode ? 00728 if (_XML) 00729 { 00730 return xmlPushBeginInternal (name); 00731 } 00732 00733 // Return ok 00734 return true; 00735 } |
|
xmlPushBegin implementation
Reimplemented in NLMISC::COXml. Definition at line 833 of file stream.h. Referenced by NLMISC::IStream::xmlPush(), and NLMISC::IStream::xmlPushBegin().
00833 { return true; }; |
|
xmlPushEnd() close the node header.
Definition at line 742 of file stream.h. References NLMISC::IStream::_XML, and NLMISC::IStream::xmlPushEndInternal(). Referenced by NLMISC::CObjectVector< sint8, false >::serial(), NLMISC::IStream::serialIStreamable(), NLMISC::IStream::serialMap(), NLMISC::IStream::serialMultimap(), NLMISC::IStream::serialPtr(), NLMISC::IStream::serialSTLCont(), NLMISC::IStream::serialSTLContPtr(), NLMISC::IStream::serialVector(), NLMISC::IStream::serialVectorPolyPtr(), and NLMISC::IStream::serialVectorPtr().
00743 { 00744 // XML Mode ? 00745 if (_XML) 00746 { 00747 return xmlPushEndInternal (); 00748 } 00749 00750 // Return ok 00751 return true; 00752 } |
|
xmlPushEnd implementation
Reimplemented in NLMISC::COXml. Definition at line 836 of file stream.h. Referenced by NLMISC::IStream::xmlPush(), and NLMISC::IStream::xmlPushEnd().
00836 { return true; }; |
|
Definition at line 683 of file stream.h. References NLMISC::IStream::serial(), NLMISC::IStream::xmlPop(), and NLMISC::IStream::xmlPush().
|
|
Definition at line 671 of file stream.h. References NLMISC::IStream::serial(), NLMISC::IStream::xmlPop(), and NLMISC::IStream::xmlPush().
|
|
Definition at line 659 of file stream.h. References NLMISC::IStream::serial(), NLMISC::IStream::xmlPop(), and NLMISC::IStream::xmlPush().
|
|
xmlSerial() serial a values into a node. Definition at line 647 of file stream.h. References NLMISC::IStream::serial(), NLMISC::IStream::xmlPop(), and NLMISC::IStream::xmlPush(). Referenced by NLLIGO::CZoneRegion::serial(), NLLIGO::CZoneRegion::SZoneUnit2::serial(), NLLIGO::CZoneRegion::SZoneUnit::serial(), NL3D::CZone::serial(), NL3D::CPatchInfo::CBindInfo::serial(), NL3D::CZone::CPatchConnect::serial(), NL3D::CBorderVertex::serial(), NL3D::CTileElement::serial(), NL3D::CTileColorOldPatchVersion6::serial(), NL3D::CTileColor::serial(), and NL3D::CPatch::serial().
|
|
xmlSetAttrib() set the name of the next node header attribute serialised. is the name of the node header attribute serialised.
Definition at line 777 of file stream.h. References NLMISC::IStream::_XML, and NLMISC::IStream::xmlSetAttribInternal(). Referenced by NLMISC::CObjectVector< sint8, false >::serial(), NLMISC::IStream::serialIStreamable(), NLMISC::IStream::serialMap(), NLMISC::IStream::serialMultimap(), NLMISC::IStream::serialPtr(), NLMISC::IStream::serialSTLCont(), NLMISC::IStream::serialSTLContPtr(), NLMISC::IStream::serialVector(), NLMISC::IStream::serialVectorPolyPtr(), and NLMISC::IStream::serialVectorPtr().
00778 { 00779 // XML Mode ? 00780 if (_XML) 00781 { 00782 return xmlSetAttribInternal (name); 00783 } 00784 00785 // Return ok 00786 return true; 00787 } |
|
xmlBreakLine implementation
Reimplemented in NLMISC::COXml. Definition at line 842 of file stream.h. Referenced by NLMISC::IStream::xmlSetAttrib().
00842 { return true; }; |
|
Definition at line 516 of file mem_stream.h. Referenced by NLMISC::CMemStream::operator=(). |
|
Definition at line 517 of file mem_stream.h. Referenced by NLMISC::CMemStream::bufferToFill(), NLMISC::CMemStream::clear(), NLMISC::CMemStream::CMemStream(), NLMISC::CMemStream::fastRead(), NLMISC::CMemStream::fastSerial(), NLMISC::CMemStream::fastWrite(), NLMISC::CMemStream::fill(), NLMISC::CMemStream::getPos(), NLMISC::CMemStream::increaseBufferIfNecessary(), NLMISC::CMemStream::invert(), NLMISC::CMemStream::lengthS(), NLMISC::CMemStream::operator=(), NLMISC::CMemStream::poke(), NLMISC::CMemStream::reserve(), NLMISC::CMemStream::resetBufPos(), NLMISC::CMemStream::resize(), NLMISC::CMemStream::serialBuffer(), NLMISC::CMemStream::serialSeparatedBufferIn(), and NLMISC::CMemStream::serialSeparatedBufferOut(). |
|
Debug details about what was serialised.
Definition at line 754 of file bit_mem_stream.h. Referenced by bufferToFill(), displayStream(), fill(), operator=(), poke(), pokeBits(), resetBufPos(), serial(), serialBit(), and serialBuffer(). |
|
Definition at line 521 of file mem_stream.h. Referenced by NLMISC::CMemStream::clear(), NLMISC::CMemStream::CMemStream(), and NLMISC::CMemStream::operator=(). |
|
Number of bits unused at the current pos. If 8, means the current pos if full and we need to increment the pos!
Definition at line 751 of file bit_mem_stream.h. Referenced by bufferToFill(), displayStream(), fill(), getPosInBit(), getSerialItem(), internalSerial(), length(), operator=(), pointNextByte(), poke(), pokeBits(), resetBufPos(), and serialPoke(). |
|
Definition at line 519 of file mem_stream.h. Referenced by NLMISC::CMemStream::CMemStream(), NLMISC::CMemStream::operator=(), NLMISC::CMemStream::serial(), NLMISC::CMemStream::serialHex(), NLMISC::CMemStream::serialSeparatedBufferIn(), NLMISC::CMemStream::serialSeparatedBufferOut(), NLMISC::CMemStream::setStringMode(), and NLMISC::CMemStream::stringMode(). |