1 // LSBFEncoder.cpp 2 3 #include "StdAfx.h" 4 5 #include "LSBFEncoder.h" 6 #include "Common/Defs.h" 7 8 namespace NStream { 9 namespace NLSBF { 10 WriteBits(UInt32 value,int numBits)11void CEncoder::WriteBits(UInt32 value, int numBits) 12 { 13 while(numBits > 0) 14 { 15 if (numBits < m_BitPos) 16 { 17 m_CurByte |= (value & ((1 << numBits) - 1)) << (8 - m_BitPos); 18 m_BitPos -= numBits; 19 return; 20 } 21 numBits -= m_BitPos; 22 m_Stream.WriteByte((Byte)(m_CurByte | (value << (8 - m_BitPos)))); 23 value >>= m_BitPos; 24 m_BitPos = 8; 25 m_CurByte = 0; 26 } 27 } 28 29 }} 30