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); }
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); }