internal void rescale(ModelPPM model) { int OldNS = NumStats, i = NumStats - 1, Adder, EscFreq; // STATE* p1, * p; State p1 = new State(model.Heap); State p = new State(model.Heap); State temp = new State(model.Heap); for (p.Address = model.FoundState.Address; p.Address != freqData.GetStats(); p.DecrementAddress()) { temp.Address = p.Address - State.Size; State.PPMDSwap(p, temp); } temp.Address = freqData.GetStats(); temp.IncrementFreq(4); freqData.IncrementSummFreq(4); EscFreq = freqData.SummFreq - p.Freq; Adder = (model.OrderFall != 0) ? 1 : 0; p.Freq = Utility.URShift((p.Freq + Adder), 1); freqData.SummFreq = p.Freq; do { p.IncrementAddress(); EscFreq -= p.Freq; p.Freq = Utility.URShift((p.Freq + Adder), 1); freqData.IncrementSummFreq(p.Freq); temp.Address = p.Address - State.Size; if (p.Freq > temp.Freq) { p1.Address = p.Address; StateRef tmp = new StateRef(); tmp.Values = p1; State temp2 = new State(model.Heap); State temp3 = new State(model.Heap); do { // p1[0]=p1[-1]; temp2.Address = p1.Address - State.Size; p1.SetValues(temp2); p1.DecrementAddress(); temp3.Address = p1.Address - State.Size; } while (p1.Address != freqData.GetStats() && tmp.Freq > temp3.Freq); p1.SetValues(tmp); } } while (--i != 0); if (p.Freq == 0) { do { i++; p.DecrementAddress(); } while (p.Freq == 0); EscFreq += i; NumStats = NumStats - i; if (NumStats == 1) { StateRef tmp = new StateRef(); temp.Address = freqData.GetStats(); tmp.Values = temp; // STATE tmp=*U.Stats; do { // tmp.Freq-=(tmp.Freq >> 1) tmp.DecrementFreq(Utility.URShift(tmp.Freq, 1)); EscFreq = Utility.URShift(EscFreq, 1); } while (EscFreq > 1); model.SubAlloc.freeUnits(freqData.GetStats(), Utility.URShift((OldNS + 1), 1)); oneState.SetValues(tmp); model.FoundState.Address = oneState.Address; return; } } EscFreq -= Utility.URShift(EscFreq, 1); freqData.IncrementSummFreq(EscFreq); int n0 = Utility.URShift((OldNS + 1), 1), n1 = Utility.URShift((NumStats + 1), 1); if (n0 != n1) { freqData.SetStats(model.SubAlloc.shrinkUnits(freqData.GetStats(), n0, n1)); } model.FoundState.Address = freqData.GetStats(); }
internal void rescale(ModelPPM model) { StateRef ref2; int numStats = this.NumStats; int num2 = this.NumStats - 1; SharpCompress.Compressor.PPMd.H.State state = new SharpCompress.Compressor.PPMd.H.State(model.Heap); SharpCompress.Compressor.PPMd.H.State state2 = new SharpCompress.Compressor.PPMd.H.State(model.Heap); SharpCompress.Compressor.PPMd.H.State state3 = new SharpCompress.Compressor.PPMd.H.State(model.Heap); state2.Address = model.FoundState.Address; while (state2.Address != this.freqData.GetStats()) { state3.Address = state2.Address - 6; SharpCompress.Compressor.PPMd.H.State.PPMDSwap(state2, state3); state2.DecrementAddress(); } state3.Address = this.freqData.GetStats(); state3.IncrementFreq(4); this.freqData.IncrementSummFreq(4); int number = this.freqData.SummFreq - state2.Freq; int num3 = (model.OrderFall != 0) ? 1 : 0; state2.Freq = Utility.URShift((int) (state2.Freq + num3), 1); this.freqData.SummFreq = state2.Freq; do { state2.IncrementAddress(); number -= state2.Freq; state2.Freq = Utility.URShift((int) (state2.Freq + num3), 1); this.freqData.IncrementSummFreq(state2.Freq); state3.Address = state2.Address - 6; if (state2.Freq > state3.Freq) { state.Address = state2.Address; ref2 = new StateRef(); ref2.Values = state; SharpCompress.Compressor.PPMd.H.State ptr = new SharpCompress.Compressor.PPMd.H.State(model.Heap); SharpCompress.Compressor.PPMd.H.State state5 = new SharpCompress.Compressor.PPMd.H.State(model.Heap); do { ptr.Address = state.Address - 6; state.SetValues(ptr); state.DecrementAddress(); state5.Address = state.Address - 6; } while ((state.Address != this.freqData.GetStats()) && (ref2.Freq > state5.Freq)); state.SetValues(ref2); } } while (--num2 != 0); if (state2.Freq == 0) { do { num2++; state2.DecrementAddress(); } while (state2.Freq == 0); number += num2; this.NumStats -= num2; if (this.NumStats == 1) { ref2 = new StateRef(); state3.Address = this.freqData.GetStats(); ref2.Values = state3; do { ref2.DecrementFreq(Utility.URShift(ref2.Freq, 1)); number = Utility.URShift(number, 1); } while (number > 1); model.SubAlloc.freeUnits(this.freqData.GetStats(), Utility.URShift((int) (numStats + 1), 1)); this.oneState.SetValues(ref2); model.FoundState.Address = this.oneState.Address; return; } } number -= Utility.URShift(number, 1); this.freqData.IncrementSummFreq(number); int oldNU = Utility.URShift((int) (numStats + 1), 1); int newNU = Utility.URShift((int) (this.NumStats + 1), 1); if (oldNU != newNU) { this.freqData.SetStats(model.SubAlloc.shrinkUnits(this.freqData.GetStats(), oldNU, newNU)); } model.FoundState.Address = this.freqData.GetStats(); }
internal void rescale(ModelPPM model) { StateRef ref2; int numStats = this.NumStats; int num2 = this.NumStats - 1; SharpCompress.Compressor.PPMd.H.State state = new SharpCompress.Compressor.PPMd.H.State(model.Heap); SharpCompress.Compressor.PPMd.H.State state2 = new SharpCompress.Compressor.PPMd.H.State(model.Heap); SharpCompress.Compressor.PPMd.H.State state3 = new SharpCompress.Compressor.PPMd.H.State(model.Heap); state2.Address = model.FoundState.Address; while (state2.Address != this.freqData.GetStats()) { state3.Address = state2.Address - 6; SharpCompress.Compressor.PPMd.H.State.PPMDSwap(state2, state3); state2.DecrementAddress(); } state3.Address = this.freqData.GetStats(); state3.IncrementFreq(4); this.freqData.IncrementSummFreq(4); int number = this.freqData.SummFreq - state2.Freq; int num3 = (model.OrderFall != 0) ? 1 : 0; state2.Freq = Utility.URShift((int)(state2.Freq + num3), 1); this.freqData.SummFreq = state2.Freq; do { state2.IncrementAddress(); number -= state2.Freq; state2.Freq = Utility.URShift((int)(state2.Freq + num3), 1); this.freqData.IncrementSummFreq(state2.Freq); state3.Address = state2.Address - 6; if (state2.Freq > state3.Freq) { state.Address = state2.Address; ref2 = new StateRef(); ref2.Values = state; SharpCompress.Compressor.PPMd.H.State ptr = new SharpCompress.Compressor.PPMd.H.State(model.Heap); SharpCompress.Compressor.PPMd.H.State state5 = new SharpCompress.Compressor.PPMd.H.State(model.Heap); do { ptr.Address = state.Address - 6; state.SetValues(ptr); state.DecrementAddress(); state5.Address = state.Address - 6; }while ((state.Address != this.freqData.GetStats()) && (ref2.Freq > state5.Freq)); state.SetValues(ref2); } }while (--num2 != 0); if (state2.Freq == 0) { do { num2++; state2.DecrementAddress(); }while (state2.Freq == 0); number += num2; this.NumStats -= num2; if (this.NumStats == 1) { ref2 = new StateRef(); state3.Address = this.freqData.GetStats(); ref2.Values = state3; do { ref2.DecrementFreq(Utility.URShift(ref2.Freq, 1)); number = Utility.URShift(number, 1); }while (number > 1); model.SubAlloc.freeUnits(this.freqData.GetStats(), Utility.URShift((int)(numStats + 1), 1)); this.oneState.SetValues(ref2); model.FoundState.Address = this.oneState.Address; return; } } number -= Utility.URShift(number, 1); this.freqData.IncrementSummFreq(number); int oldNU = Utility.URShift((int)(numStats + 1), 1); int newNU = Utility.URShift((int)(this.NumStats + 1), 1); if (oldNU != newNU) { this.freqData.SetStats(model.SubAlloc.shrinkUnits(this.freqData.GetStats(), oldNU, newNU)); } model.FoundState.Address = this.freqData.GetStats(); }