summaryrefslogtreecommitdiffstats
path: root/other-licenses/7zstub/src/7zip/Common/LSBFEncoder.cpp
blob: a0ed300c6ea43639aba96f0d32bc845a5be3d0e7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// LSBFEncoder.cpp

#include "StdAfx.h"

#include "LSBFEncoder.h"
#include "Common/Defs.h"

namespace NStream {
namespace NLSBF {

void CEncoder::WriteBits(UInt32 value, int numBits)
{
  while(numBits > 0)
  {
    if (numBits < m_BitPos)
    {
      m_CurByte |= (value & ((1 << numBits) - 1)) << (8 - m_BitPos);
      m_BitPos -= numBits;
      return;
    }
    numBits -= m_BitPos;
    m_Stream.WriteByte((Byte)(m_CurByte | (value << (8 - m_BitPos))));
    value >>= m_BitPos;
    m_BitPos = 8;
    m_CurByte = 0;
  }
}

}}