(PNG) ublic class BitWriter(Stream stream)
(???)
(???) private uint _buffer;
(???) private int _count;
(???) // write `code` with a number of `bits` (Most Significant Bit)
(???) public void WriteBits(uint code, int bits)
(???) {
(???) for (var i = bits - 1; i >= 0; i--)
(???) {
(???) var mask = code >> i;
(???) var bit = mask & 1;
(???) _buffer |= bit << _count;
(???) _count++;
(???) // flush buffer
(???) while (_count >= 8)
(???) {
(???) stream.WriteByte((byte)(_buffer & 0xFF));
(???) _buffer >>= 8;
(???) _count -= 8;
(???) }
(???) }
(???) }
(???) public void Flush()
(???) {
(???) if (_count <= 0)
(???) {
(???) return;
(???) }
(???) stream.WriteByte((byte)_buffer);
(???) }
(???)