Exemplo n.º 1
0
        public void Compress(Stream inStream, BitOutputStream outStream)
        {
            var enc   = new ArithmeticEncoder(outStream);
            var model = new PpmModel(ModelOrder, EscapeSymbol);

            var history = new int[0];

            while (true)
            {
                var symbol = inStream.ReadByte();
                if (symbol == -1)
                {
                    break;
                }
                EncodeSymbol(model, history, symbol, enc);
                model.IncrementContexts(history, symbol);

                if (model.ModelOrder >= 1)
                {
                    if (history.Length < model.ModelOrder)
                    {
                        Array.Resize(ref history, history.Length + 1);
                    }
                    Array.Copy(history, 0, history, 1, history.Length - 1);
                    history[0] = symbol;
                }
            }

            EncodeSymbol(model, history, EscapeSymbol, enc);
            enc.Finish();
        }