示例#1
0
        public static uint ReverseDecode(
            LzmaRangeBitDecoder[] models,
            uint startIndex,
            LzmaRangeDecoder rangeDecoder,
            int numBitLevels)
        {
            uint num1 = 1;
            uint num2 = 0;

            if (rangeDecoder.CheckInputRequired(numBitLevels, false))
            {
                for (int index = 0; index < numBitLevels; ++index)
                {
                    uint num3 = models[(IntPtr)(startIndex + num1)].Decode(rangeDecoder);
                    if (!rangeDecoder.InputRequired)
                    {
                        num1  = (num1 << 1) + num3;
                        num2 |= num3 << index;
                    }
                    else
                    {
                        break;
                    }
                }
            }
            return(num2);
        }
示例#2
0
 public byte DecodeWithMatchByte(
     LzmaRangeDecoder rangeDecoder,
     uint pos,
     byte previousByte,
     byte matchByte)
 {
     return(this.coders[(IntPtr)this.GetState(pos, previousByte)].DecodeWithMatchByte(rangeDecoder, matchByte));
 }
示例#3
0
            public byte DecodeNormal(LzmaRangeDecoder rangeDecoder)
            {
                uint num = 1;

                do
                {
                    num = num << 1 | this.decoders[(IntPtr)num].Decode(rangeDecoder);
                }while (num < 256U);
                return((byte)num);
            }
示例#4
0
        public uint Decode(LzmaRangeDecoder rangeDecoder)
        {
            uint num = 1;

            if (rangeDecoder.CheckInputRequired(this.bitLevels, false))
            {
                for (int bitLevels = this.bitLevels; bitLevels > 0; --bitLevels)
                {
                    num = (num << 1) + this.models[(IntPtr)num].Decode(rangeDecoder);
                }
            }
            return(num - (uint)(1 << this.bitLevels));
        }
示例#5
0
        public uint Decode(LzmaRangeDecoder rangeDecoder, uint positionState)
        {
            rangeDecoder.SaveState();
            uint num1 = this.choice.Decode(rangeDecoder);

            if (rangeDecoder.InputRequired)
            {
                return(0);
            }
            uint num2;

            if (num1 == 0U)
            {
                num2 = this.lowCoder[(IntPtr)positionState].Decode(rangeDecoder);
            }
            else
            {
                num2 = 8U;
                uint num3 = this.choice2.Decode(rangeDecoder);
                if (!rangeDecoder.InputRequired)
                {
                    if (num3 == 0U)
                    {
                        num2 += this.middleCoder[(IntPtr)positionState].Decode(rangeDecoder);
                    }
                    else
                    {
                        num2 = num2 + 8U + this.highCoder.Decode(rangeDecoder);
                    }
                }
                if (rangeDecoder.InputRequired)
                {
                    this.choice2.RestoreState();
                }
            }
            if (rangeDecoder.InputRequired)
            {
                this.choice.RestoreState();
                rangeDecoder.RestoreState();
            }
            return(num2);
        }
示例#6
0
            public byte DecodeWithMatchByte(LzmaRangeDecoder rangeDecoder, byte matchByte)
            {
                uint num1 = 1;

                do
                {
                    uint num2 = (uint)((int)matchByte >> 7 & 1);
                    matchByte <<= 1;
                    uint num3 = this.decoders[(IntPtr)((uint)(1 + (int)num2 << 8) + num1)].Decode(rangeDecoder);
                    num1 = num1 << 1 | num3;
                    if ((int)num2 != (int)num3)
                    {
                        while (num1 < 256U)
                        {
                            num1 = num1 << 1 | this.decoders[(IntPtr)num1].Decode(rangeDecoder);
                        }
                        break;
                    }
                }while (num1 < 256U);
                return((byte)num1);
            }
示例#7
0
 public uint ReverseDecode(LzmaRangeDecoder rangeDecoder)
 {
     return(LzmaBitTreeDecoder.ReverseDecode(this.models, 0U, rangeDecoder, this.bitLevels));
 }
示例#8
0
 public byte DecodeNormal(LzmaRangeDecoder rangeDecoder, uint position, byte previousByte)
 {
     return(this.coders[(IntPtr)this.GetState(position, previousByte)].DecodeNormal(rangeDecoder));
 }