public virtual int decodeChar() { // Debug //subAlloc.dumpHeap(); if (minContext.Address <= SubAlloc.PText || minContext.Address > SubAlloc.HeapEnd) { return(-1); } if (minContext.NumStats != 1) { if (minContext.FreqData.GetStats() <= SubAlloc.PText || minContext.FreqData.GetStats() > SubAlloc.HeapEnd) { return(-1); } if (!minContext.decodeSymbol1(this)) { return(-1); } } else { minContext.decodeBinSymbol(this); } Coder.Decode(); while (FoundState.Address == 0) { Coder.AriDecNormalize(); do { orderFall++; minContext.Address = minContext.getSuffix(); // =MinContext->Suffix; if (minContext.Address <= SubAlloc.PText || minContext.Address > SubAlloc.HeapEnd) { return(-1); } }while (minContext.NumStats == numMasked); if (!minContext.decodeSymbol2(this)) { return(-1); } Coder.Decode(); } int Symbol = FoundState.Symbol; if ((orderFall == 0) && FoundState.GetSuccessor() > SubAlloc.PText) { // MinContext=MaxContext=FoundState->Successor; int addr = FoundState.GetSuccessor(); minContext.Address = addr; maxContext.Address = addr; } else { updateModel(); //this.foundState.Address=foundState.Address);//TODO just 4 debugging if (escCount == 0) { clearMask(); } } Coder.AriDecNormalize(); // ARI_DEC_NORMALIZE(Coder.code,Coder.low,Coder.range,Coder.UnpackRead); return(Symbol); }