internal void decodeBinSymbol(ModelPPM model) { SharpCompress.Compressor.PPMd.H.State rs = this.tempState1.Initialize(model.Heap); rs.Address = this.oneState.Address; model.HiBitsFlag = model.getHB2Flag()[model.FoundState.Symbol]; int index = rs.Freq - 1; int num2 = this.getArrayIndex(model, rs); int summ = model.BinSumm[index][num2]; if (model.Coder.GetCurrentShiftCount(ModelPPM.TOT_BITS) < summ) { model.FoundState.Address = rs.Address; rs.IncrementFreq((rs.Freq < 0x80) ? 1 : 0); model.Coder.SubRange.LowCount = 0L; model.Coder.SubRange.HighCount = summ; summ = ((summ + ModelPPM.INTERVAL) - this.getMean(summ, 7, 2)) & 0xffff; model.BinSumm[index][num2] = summ; model.PrevSuccess = 1; model.incRunLength(1); } else { model.Coder.SubRange.LowCount = summ; summ = (summ - this.getMean(summ, 7, 2)) & 0xffff; model.BinSumm[index][num2] = summ; model.Coder.SubRange.HighCount = ModelPPM.BIN_SCALE; model.InitEsc = ExpEscape[Utility.URShift(summ, 10)]; model.NumMasked = 1; model.CharMask[rs.Symbol] = model.EscCount; model.PrevSuccess = 0; model.FoundState.Address = 0; } }
internal void decodeBinSymbol(ModelPPM model) { State rs = tempState1.Initialize(model.Heap); rs.Address = oneState.Address; // State& model.HiBitsFlag = model.getHB2Flag()[model.FoundState.Symbol]; int off1 = rs.Freq - 1; int off2 = getArrayIndex(model, rs); int bs = model.BinSumm[off1][off2]; if (model.Coder.GetCurrentShiftCount(ModelPPM.TOT_BITS) < bs) { model.FoundState.Address = rs.Address; rs.IncrementFreq((rs.Freq < 128) ? 1 : 0); model.Coder.SubRange.LowCount = 0; model.Coder.SubRange.HighCount = bs; bs = ((bs + ModelPPM.INTERVAL - getMean(bs, ModelPPM.PERIOD_BITS, 2)) & 0xffff); model.BinSumm[off1][off2] = bs; model.PrevSuccess = 1; model.incRunLength(1); } else { model.Coder.SubRange.LowCount = bs; bs = (bs - getMean(bs, ModelPPM.PERIOD_BITS, 2)) & 0xFFFF; model.BinSumm[off1][off2] = bs; model.Coder.SubRange.HighCount = ModelPPM.BIN_SCALE; model.InitEsc = ExpEscape[Utility.URShift(bs, 10)]; model.NumMasked = 1; model.CharMask[rs.Symbol] = model.EscCount; model.PrevSuccess = 0; model.FoundState.Address = 0; } //int a = 0;//TODO just 4 debugging }
internal int getArrayIndex(ModelPPM Model, SharpCompress.Compressor.PPMd.H.State rs) { PPMContext context = this.getTempPPMContext(Model.SubAlloc.Heap); context.Address = this.getSuffix(); int num = 0; num += Model.PrevSuccess; num += Model.getNS2BSIndx()[context.NumStats - 1]; num += Model.HiBitsFlag + (2 * Model.getHB2Flag()[rs.Symbol]); return(num + (Utility.URShift(Model.RunLength, 0x1a) & 0x20)); }
internal int getArrayIndex(ModelPPM Model, State rs) { PPMContext tempSuffix = getTempPPMContext(Model.SubAlloc.Heap); tempSuffix.Address = getSuffix(); int ret = 0; ret += Model.PrevSuccess; ret += Model.getNS2BSIndx()[tempSuffix.NumStats - 1]; ret += Model.HiBitsFlag + 2 * Model.getHB2Flag()[rs.Symbol]; ret += ((Utility.URShift(Model.RunLength, 26)) & 0x20); return(ret); }
internal bool decodeSymbol1(ModelPPM model) { RangeCoder coder = model.Coder; coder.SubRange.Scale = freqData.SummFreq; State p = new State(model.Heap); p.Address = freqData.GetStats(); int i, HiCnt; long count = coder.CurrentCount; if (count >= coder.SubRange.Scale) { return(false); } if (count < (HiCnt = p.Freq)) { coder.SubRange.HighCount = HiCnt; model.PrevSuccess = (2 * HiCnt > coder.SubRange.Scale) ? 1 : 0; model.incRunLength(model.PrevSuccess); HiCnt += 4; model.FoundState.Address = p.Address; model.FoundState.Freq = HiCnt; freqData.IncrementSummFreq(4); if (HiCnt > ModelPPM.MAX_FREQ) { rescale(model); } coder.SubRange.LowCount = 0; return(true); } else { if (model.FoundState.Address == 0) { return(false); } } model.PrevSuccess = 0; int numStats = NumStats; i = numStats - 1; while ((HiCnt += p.IncrementAddress().Freq) <= count) { if (--i == 0) { model.HiBitsFlag = model.getHB2Flag()[model.FoundState.Symbol]; coder.SubRange.LowCount = HiCnt; model.CharMask[p.Symbol] = model.EscCount; model.NumMasked = numStats; i = numStats - 1; model.FoundState.Address = 0; do { model.CharMask[p.DecrementAddress().Symbol] = model.EscCount; } while (--i != 0); coder.SubRange.HighCount = coder.SubRange.Scale; return(true); } } coder.SubRange.LowCount = HiCnt - p.Freq; coder.SubRange.HighCount = HiCnt; update1(model, p.Address); return(true); }
internal bool decodeSymbol1(ModelPPM model) { RangeCoder coder = model.Coder; coder.SubRange.Scale = freqData.SummFreq; State p = new State(model.Heap); p.Address = freqData.GetStats(); int i, HiCnt; long count = coder.CurrentCount; if (count >= coder.SubRange.Scale) { return false; } if (count < (HiCnt = p.Freq)) { coder.SubRange.HighCount = HiCnt; model.PrevSuccess = (2 * HiCnt > coder.SubRange.Scale) ? 1 : 0; model.incRunLength(model.PrevSuccess); HiCnt += 4; model.FoundState.Address = p.Address; model.FoundState.Freq = HiCnt; freqData.IncrementSummFreq(4); if (HiCnt > ModelPPM.MAX_FREQ) { rescale(model); } coder.SubRange.LowCount = 0; return true; } else { if (model.FoundState.Address == 0) { return (false); } } model.PrevSuccess = 0; int numStats = NumStats; i = numStats - 1; while ((HiCnt += p.IncrementAddress().Freq) <= count) { if (--i == 0) { model.HiBitsFlag = model.getHB2Flag()[model.FoundState.Symbol]; coder.SubRange.LowCount = HiCnt; model.CharMask[p.Symbol] = model.EscCount; model.NumMasked = numStats; i = numStats - 1; model.FoundState.Address = 0; do { model.CharMask[p.DecrementAddress().Symbol] = model.EscCount; } while (--i != 0); coder.SubRange.HighCount = coder.SubRange.Scale; return (true); } } coder.SubRange.LowCount = HiCnt - p.Freq; coder.SubRange.HighCount = HiCnt; update1(model, p.Address); return (true); }
internal int getArrayIndex(ModelPPM Model, State rs) { PPMContext tempSuffix = getTempPPMContext(Model.SubAlloc.Heap); tempSuffix.Address = getSuffix(); int ret = 0; ret += Model.PrevSuccess; ret += Model.getNS2BSIndx()[tempSuffix.NumStats - 1]; ret += Model.HiBitsFlag + 2 * Model.getHB2Flag()[rs.Symbol]; ret += ((Utility.URShift(Model.RunLength, 26)) & 0x20); return ret; }
internal int getArrayIndex(ModelPPM Model, SharpCompress.Compressor.PPMd.H.State rs) { PPMContext context = this.getTempPPMContext(Model.SubAlloc.Heap); context.Address = this.getSuffix(); int num = 0; num += Model.PrevSuccess; num += Model.getNS2BSIndx()[context.NumStats - 1]; num += Model.HiBitsFlag + (2 * Model.getHB2Flag()[rs.Symbol]); return (num + (Utility.URShift(Model.RunLength, 0x1a) & 0x20)); }
internal bool decodeSymbol1(ModelPPM model) { int num2; RangeCoder coder = model.Coder; coder.SubRange.Scale = this.freqData.SummFreq; SharpCompress.Compressor.PPMd.H.State state = new SharpCompress.Compressor.PPMd.H.State(model.Heap); state.Address = this.freqData.GetStats(); long currentCount = coder.CurrentCount; if (currentCount >= coder.SubRange.Scale) { return false; } if (currentCount < (num2 = state.Freq)) { coder.SubRange.HighCount = num2; model.PrevSuccess = ((2 * num2) > coder.SubRange.Scale) ? 1 : 0; model.incRunLength(model.PrevSuccess); num2 += 4; model.FoundState.Address = state.Address; model.FoundState.Freq = num2; this.freqData.IncrementSummFreq(4); if (num2 > 0x7c) { this.rescale(model); } coder.SubRange.LowCount = 0L; return true; } if (model.FoundState.Address == 0) { return false; } model.PrevSuccess = 0; int numStats = this.NumStats; int num = numStats - 1; while ((num2 += state.IncrementAddress().Freq) <= currentCount) { if (--num == 0) { model.HiBitsFlag = model.getHB2Flag()[model.FoundState.Symbol]; coder.SubRange.LowCount = num2; model.CharMask[state.Symbol] = model.EscCount; model.NumMasked = numStats; num = numStats - 1; model.FoundState.Address = 0; do { model.CharMask[state.DecrementAddress().Symbol] = model.EscCount; } while (--num != 0); coder.SubRange.HighCount = coder.SubRange.Scale; return true; } } coder.SubRange.LowCount = num2 - state.Freq; coder.SubRange.HighCount = num2; this.update1(model, state.Address); return true; }
internal bool decodeSymbol1(ModelPPM model) { int num2; RangeCoder coder = model.Coder; coder.SubRange.Scale = this.freqData.SummFreq; SharpCompress.Compressor.PPMd.H.State state = new SharpCompress.Compressor.PPMd.H.State(model.Heap); state.Address = this.freqData.GetStats(); long currentCount = coder.CurrentCount; if (currentCount >= coder.SubRange.Scale) { return(false); } if (currentCount < (num2 = state.Freq)) { coder.SubRange.HighCount = num2; model.PrevSuccess = ((2 * num2) > coder.SubRange.Scale) ? 1 : 0; model.incRunLength(model.PrevSuccess); num2 += 4; model.FoundState.Address = state.Address; model.FoundState.Freq = num2; this.freqData.IncrementSummFreq(4); if (num2 > 0x7c) { this.rescale(model); } coder.SubRange.LowCount = 0L; return(true); } if (model.FoundState.Address == 0) { return(false); } model.PrevSuccess = 0; int numStats = this.NumStats; int num = numStats - 1; while ((num2 += state.IncrementAddress().Freq) <= currentCount) { if (--num == 0) { model.HiBitsFlag = model.getHB2Flag()[model.FoundState.Symbol]; coder.SubRange.LowCount = num2; model.CharMask[state.Symbol] = model.EscCount; model.NumMasked = numStats; num = numStats - 1; model.FoundState.Address = 0; do { model.CharMask[state.DecrementAddress().Symbol] = model.EscCount; }while (--num != 0); coder.SubRange.HighCount = coder.SubRange.Scale; return(true); } } coder.SubRange.LowCount = num2 - state.Freq; coder.SubRange.HighCount = num2; this.update1(model, state.Address); return(true); }