public void Encode()
        {
            DefaultableSymbol <byte> previousSymbol;
            Dictionary <DefaultableSymbol <byte>, ICoder <byte> > coderDictionary = createCoderDictionary();

            coderDictionary[new DefaultableSymbol <byte>(true)].Encode(new MarkowHuffmanCoderInput(inputReader.Current), new HuffmanCoderOutput(coderOutputWriter));
            previousSymbol = new DefaultableSymbol <byte>(inputReader.Current);
            while (inputReader.MoveNext())
            {
                coderDictionary[previousSymbol].Encode(new MarkowHuffmanCoderInput(inputReader.Current), new HuffmanCoderOutput(coderOutputWriter));
                previousSymbol = new DefaultableSymbol <byte>(inputReader.Current);
            }
            coderOutputWriter.CreateFileBytes(HuffmanEncodeModel.Markov, true, SymbolQuantityMapConverter.MarkowIntToExtConvert(this.symbolDictionary, CreateEncodingDictionaries(coderDictionary)));
        }
        public byte Read()
        {
            byte symbol = inputReader.Current;

            isEnd = !inputReader.MoveNext();
            return(symbol);
        }
Beispiel #3
0
        public Tuple <byte, DefaultableSymbol <byte> > Read()
        {
            byte firstSymbol = inputReader.Current;

            isEnd = !inputReader.MoveNext();
            if (isEnd)
            {
                isSpecialSymbol = true;
                return(new Tuple <byte, DefaultableSymbol <byte> >(firstSymbol, new DefaultableSymbol <byte>(true)));
            }
            else
            {
                byte secondSymbol = inputReader.Current;
                isEnd = !inputReader.MoveNext();
                return(new Tuple <byte, DefaultableSymbol <byte> >(firstSymbol, new DefaultableSymbol <byte>(secondSymbol)));
            }
        }
        private Dictionary <byte, int> createDictionary()
        {
            Dictionary <byte, int> symbolQuantityDic = new Dictionary <byte, int>();

            do
            {
                if (symbolQuantityDic.ContainsKey(inputReader.Current))
                {
                    ++symbolQuantityDic[inputReader.Current];
                }
                else
                {
                    symbolQuantityDic.Add(inputReader.Current, 1);
                }
            } while (inputReader.MoveNext());

            inputReader.Reset();

            return(symbolQuantityDic);
        }