void BitStream::Write( BitStream *bitStream, uint32 numberOfBits ) { AddBitsAndReallocate( numberOfBits ); uint32 numberOfBitsMod8; if ((bitStream->GetReadOffset()&7)==0 && (numberOfBitsUsed&7)==0) { int readOffsetBytes=bitStream->GetReadOffset()/8; int numBytes=numberOfBits/8; memcpy(data + (numberOfBitsUsed >> 3), bitStream->GetData()+readOffsetBytes, numBytes); numberOfBits-=BYTES_TO_BITS(numBytes); bitStream->SetReadOffset(BYTES_TO_BITS(numBytes+readOffsetBytes)); numberOfBitsUsed+=BYTES_TO_BITS(numBytes); }
// Write an array or casted stream void BitStream::Write( const char* inputByteArray, const unsigned int numberOfBytes ) { if (numberOfBytes==0) return; // Optimization: if ((numberOfBitsUsed & 7) == 0) { AddBitsAndReallocate( BYTES_TO_BITS(numberOfBytes) ); memcpy(data+BITS_TO_BYTES(numberOfBitsUsed), inputByteArray, (size_t) numberOfBytes); numberOfBitsUsed+=BYTES_TO_BITS(numberOfBytes); } else { WriteBits( ( unsigned char* ) inputByteArray, numberOfBytes * 8, true ); } }