Main Page   Modules   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   Related Pages  

TNL::BitStream Class Reference

BitStream provides a bit-level stream interface to a data buffer. More...

#include <tnlBitStream.h>

Inheritance diagram for TNL::BitStream:

TNL::PacketStream List of all members.

Public Methods

void setMaxSizes (U32 maxReadSize, U32 maxWriteSize=0)
 Sets the maximum read and write sizes for the BitStream.

void setMaxBitSizes (U32 maxReadBitSize, U32 maxWriteBitSize=0)
 Sets the maximum read and write bit sizes for the BitStream.

void reset ()
 resets the read/write position to 0 and clears any error state.

void clearStringBuffer ()
 clears the string compression buffer.

void setStringTable (ConnectionStringTable *table)
 sets the ConnectionStringTable for compressing string table entries across the network

void clearError ()
 clears the error state from an attempted read or write overrun

U8getBytePtr ()
 Returns a pointer to the next byte in the BitStream from the current bit position.

U32 getBytePosition () const
 Returns the current position in the stream rounded up to the next byte.

U32 getBitPosition () const
 Returns the current bit position in the stream.

void setBytePosition (const U32 newPosition)
 Sets the position in the stream to the first bit of byte newPosition.

void setBitPosition (const U32 newBitPosition)
 Sets the position in the stream to newBitPosition.

void advanceBitPosition (const S32 numBits)
 Advances the position in the stream by numBits.

U32 getMaxReadBitPosition () const
 Returns the maximum readable bit position.

U32 getBitSpaceAvailable () const
 Returns the number of bits that can be written into the BitStream without resizing.

void zeroToByteBoundary ()
 Pads the bits up to the next byte boundary with 0's.

void writeInt (U32 value, U8 bitCount)
 Writes an unsigned integer value between 0 and 2^(bitCount - 1) into the stream.

U32 readInt (U8 bitCount)
 Reads an unsigned integer value between 0 and 2^(bitCount - 1) from the stream.

void writeIntAt (U32 value, U8 bitCount, U32 bitPosition)
 Writes an unsigned integer value between 0 and 2^(bitCount -1) into the stream at the specified position, without changing the current write position.

void writeSignedInt (S32 value, U8 bitCount)
 Writes a signed integer value between -2^(bitCount-1) and 2^(bitCount-1) - 1.

S32 readSignedInt (U8 bitCount)
 Reads a signed integer value between -2^(bitCount-1) and 2^(bitCount-1) - 1.

void writeRangedU32 (U32 value, U32 rangeStart, U32 rangeEnd)
 Writes an unsigned integer value in the range rangeStart to rangeEnd inclusive.

U32 readRangedU32 (U32 rangeStart, U32 rangeEnd)
 Reads an unsigned integer value in the range rangeStart to rangeEnd inclusive.

void writeEnum (U32 enumValue, U32 enumRange)
 Writes an enumeration value in the range of 0 ... enumRange - 1.

U32 readEnum (U32 enumRange)
 Reads an enumeration value in the range 0 ... enumRange - 1.

void writeFloat (F32 f, U8 bitCount)
 Writes a float from 0 to 1 inclusive, using bitCount bits of precision.

F32 readFloat (U8 bitCount)
 Reads a float from 0 to 1 inclusive, using bitCount bits of precision.

void writeSignedFloat (F32 f, U8 bitCount)
 Writes a signed float from -1 to 1 inclusive, using bitCount bits of precision.

F32 readSignedFloat (U8 bitCount)
 Reads a signed float from -1 to 1 inclusive, using bitCount bits of precision.

void writeClassId (U32 classId, U32 classType, U32 classGroup)
 Writes an object's class ID, given its class type and class group.

U32 readClassId (U32 classType, U32 classGroup)
 Reads a class ID for an object, given a class type and class group. Returns -1 if the class type is out of range.

void writeNormalVector (const Point3F &vec, U8 bitCount)
 Writes a normalized vector into the stream, using bitCount bits for the precision of angles phi and theta.

void readNormalVector (Point3F *vec, U8 bitCount)
 Reads a normalized vector from the stream, using bitCount bits for the precision of angles phi and theta.

void writeNormalVector (const Point3F &vec, U8 angleBitCount, U8 zBitCount)
 Writes a normalized vector by writing a z value and theta angle.

void readNormalVector (Point3F *vec, U8 angleBitCount, U8 zBitCount)
 Reads a normalized vector by reading a z value and theta angle.

void setPointCompression (const Point3F &p)
 Sets a reference point for subsequent compressed point writing.

void clearPointCompression ()
 Disables compression of point.

void writePointCompressed (const Point3F &p, F32 scale)
 Writes a point into the stream, to a precision denoted by scale.

void readPointCompressed (Point3F *p, F32 scale)
 Reads a compressed point from the stream, to a precision denoted by scale.

bool writeBits (U32 bitCount, const void *bitPtr)
 Writes bitCount bits into the stream from bitPtr.

bool readBits (U32 bitCount, void *bitPtr)
 Reads bitCount bits from the stream into bitPtr.

bool write (const ByteBuffer *theBuffer)
 Writes a ByteBuffer into the stream. The ByteBuffer can be no larger than 1024 bytes in size.

bool read (ByteBuffer *theBuffer)
 Reads a ByteBuffer in from the stream.

bool writeFlag (bool val)
 Writes a single boolean flag (bit) into the stream, and returns the boolean that was written.

bool readFlag ()
 Reads a single bit from the stream.

void writeString (const char *stringBuf, U8 maxLen=255)
 Writes a huffman compressed string into the stream.

void readString (char stringBuf[256])
 Reads a huffman compressed string from the stream.

void writeStringTableEntry (const StringTableEntry &ste)
 Writes a string table entry into the stream.

void readStringTableEntry (StringTableEntry *ste)
 Reads a string table entry from the stream.

bool write (const U32 in_numBytes, const void *in_pBuffer)
 Writes byte data into the stream.

bool read (const U32 in_numBytes, void *out_pBuffer)
 Reads byte data from the stream.

bool setBit (U32 bitCount, bool set)
 Sets the bit at position bitCount to the value of set.

bool testBit (U32 bitCount)
 Tests the value of the bit at position bitCount.

bool isFull ()
 Returns whether the BitStream writing has exceeded the write target size.

bool isValid ()
 Returns whether the stream has generated an error condition due to reading or writing past the end of the buffer.

void hashAndEncrypt (U32 hashDigestSize, U32 encryptStartOffset, SymmetricCipher *theCipher)
 Hashes the BitStream, writing the hash digest into the end of the buffer, and then encrypts with the given cipher.

bool decryptAndCheckHash (U32 hashDigestSize, U32 decryptStartOffset, SymmetricCipher *theCipher)
 Decrypts the BitStream, then checks the hash digest at the end of the buffer to validate the contents.

Constructors
Note that the BitStream essentially wraps an existing buffer, so to use a bitstream you must have an existing buffer for it to work with!

 BitStream (U8 *bufPtr, U32 bufSize)
 Default to maximum write size being the size of the buffer.

 BitStream (U8 *bufPtr, U32 bufSize, U32 maxWriteSize)
 Optionally, specify a maximum write size.

 BitStream ()
 Creates a resizable BitStream.

Various types that the BitStream can read and write...

Static Public Methods

Point3F dumbDownNormal (const Point3F &vec, U8 bitCount)
 Uses the same method as in writeNormalVector to reduce the precision of a normal vector to determine what will be read from the stream.


Protected Attributes

U32 bitNum
 The current bit position for reading/writing in the bit stream.

bool error
 Flag set if a user operation attempts to read or write past the max read/write sizes.

bool mCompressRelative
 Flag set if the bit stream should compress points relative to a compression point.

Point3F mCompressPoint
 Reference point for relative point compression.

U32 maxReadBitNum
 Last valid read bit position.

U32 maxWriteBitNum
 Last valid write bit position.

ConnectionStringTablemStringTable
 String table used to compress StringTableEntries over the network.


Detailed Description

BitStream provides a bit-level stream interface to a data buffer.

Definition at line 63 of file tnlBitStream.h.


Member Function Documentation

bool TNL::BitStream::readFlag   [inline]
 

Reads a single bit from the stream.

This is set up so you can do...

         if(stream->readFlag())
         {
           ... read other stuff ...
         }

Definition at line 335 of file tnlBitStream.h.

References bitNum, error, and maxReadBitNum.

Referenced by TNL::NetInterface::handleArrangedConnectRequest(), TNL::NetInterface::handleConnectChallengeRequest(), TNL::NetInterface::handleConnectChallengeResponse(), TNL::NetInterface::handleConnectRequest(), TNL::NetInterface::handlePunch(), TNL::HuffmanStringProcessor::readHuffBuffer(), readNormalVector(), TNL::GhostConnection::readPacket(), TNL::EventConnection::readPacket(), TNL::NetConnection::readPacketHeader(), TNL::NetConnection::readPacketRateInfo(), readSignedInt(), readString(), and TNL::NetObjectRPCEvent::unpack().

bool TNL::BitStream::writeFlag bool    val
 

Writes a single boolean flag (bit) into the stream, and returns the boolean that was written.

This is set up so you can do...

         if(stream->writeFlag(foo == bar))
         {
           ... write other stuff ...
         }

Definition at line 227 of file bitStream.cpp.

References bitNum, and maxWriteBitNum.

Referenced by TNL::NetObjectRPCEvent::pack(), TNL::NetInterface::sendArrangedConnectRequest(), TNL::NetInterface::sendConnectChallengeRequest(), TNL::NetInterface::sendConnectChallengeResponse(), TNL::NetInterface::sendConnectRequest(), TNL::NetInterface::sendPunchPackets(), TNL::HuffmanStringProcessor::writeHuffBuffer(), writeNormalVector(), TNL::GhostConnection::writePacket(), TNL::EventConnection::writePacket(), TNL::NetConnection::writePacketHeader(), TNL::NetConnection::writePacketRateInfo(), writeSignedInt(), and writeString().


Member Data Documentation

ConnectionStringTable* TNL::BitStream::mStringTable [protected]
 

String table used to compress StringTableEntries over the network.

String buffer holds the last string written into the stream for substring compression.

Definition at line 75 of file tnlBitStream.h.

Referenced by readStringTableEntry(), reset(), and writeStringTableEntry().


The documentation for this class was generated from the following files:
Generated on Thu Aug 18 16:03:36 2005 for Robin Hood: Thieves & Knights by doxygen1.2.18