Exemplo n.º 1
0
        void EncodeMatchLength(int length)
        {
            int len = length - MIN_MATCH;

            if (len < A)
            {
                Output.WriteBits(1, 1); // 1
                Output.WriteBits(len, A_BITS);
            }
            else if (len < B)
            {
                Output.WriteBits(1, 2); // 01
                Output.WriteBits(len - A, B_BITS);
            }
            else if (len < C)
            {
                Output.WriteBits(1, 3); // 001
                Output.WriteBits(len - B, C_BITS);
            }
            else if (len < D)
            {
                Output.WriteBits(1, 4); // 0001
                Output.WriteBits(len - C, D_BITS);
            }
            else if (len < E)
            {
                Output.WriteBits(1, 5); // 00001
                Output.WriteBits(len - D, E_BITS);
            }
            else
            {
                Output.WriteBits(0, 5); // 00000
                Output.WriteBits(len - E, F_BITS);
            }
        }
Exemplo n.º 2
0
        public void Encode(BitWriterFwd writer, int symbol)
        {
            var sym = Symbols[symbol];

            writer.WriteBits(sym.Code, sym.Length);
        }