コード例 #1
0
            // Token: 0x06000346 RID: 838 RVA: 0x0002C80C File Offset: 0x0002AA0C
            public int GetSymbol(ChromV266351.SimpleZip.StreamManipulator streamManipulator_0)
            {
                int num;

                if ((num = streamManipulator_0.PeekBits(9)) >= 0)
                {
                    int num2;
                    if ((num2 = (int)this.tree[num]) >= 0)
                    {
                        streamManipulator_0.DropBits(num2 & 15);
                        return(num2 >> 4);
                    }
                    int num3 = -(num2 >> 4);
                    int int_ = num2 & 15;
                    if ((num = streamManipulator_0.PeekBits(int_)) >= 0)
                    {
                        num2 = (int)this.tree[num3 | num >> 9];
                        streamManipulator_0.DropBits(num2 & 15);
                        return(num2 >> 4);
                    }
                    int availableBits = streamManipulator_0.AvailableBits;
                    num  = streamManipulator_0.PeekBits(availableBits);
                    num2 = (int)this.tree[num3 | num >> 9];
                    if ((num2 & 15) <= availableBits)
                    {
                        streamManipulator_0.DropBits(num2 & 15);
                        return(num2 >> 4);
                    }
                    return(-1);
                }
                else
                {
                    int availableBits2 = streamManipulator_0.AvailableBits;
                    num = streamManipulator_0.PeekBits(availableBits2);
                    int num2 = (int)this.tree[num];
                    if (num2 >= 0 && (num2 & 15) <= availableBits2)
                    {
                        streamManipulator_0.DropBits(num2 & 15);
                        return(num2 >> 4);
                    }
                    return(-1);
                }
            }
コード例 #2
0
            // Token: 0x0600033E RID: 830 RVA: 0x0002C458 File Offset: 0x0002A658
            public int CopyStored(ChromV266351.SimpleZip.StreamManipulator streamManipulator_0, int int_0)
            {
                int_0 = Math.Min(Math.Min(int_0, 32768 - this.windowFilled), streamManipulator_0.AvailableBytes);
                int num = 32768 - this.windowEnd;
                int num2;

                if (int_0 > num)
                {
                    num2 = streamManipulator_0.CopyBytes(this.window, this.windowEnd, num);
                    if (num2 == num)
                    {
                        num2 += streamManipulator_0.CopyBytes(this.window, 0, int_0 - num);
                    }
                }
                else
                {
                    num2 = streamManipulator_0.CopyBytes(this.window, this.windowEnd, int_0);
                }
                this.windowEnd     = (this.windowEnd + num2 & 32767);
                this.windowFilled += num2;
                return(num2);
            }
コード例 #3
0
            // Token: 0x06000348 RID: 840 RVA: 0x0002C8E4 File Offset: 0x0002AAE4
            public bool Decode(ChromV266351.SimpleZip.StreamManipulator streamManipulator_0)
            {
                for (;;)
                {
                    switch (this.mode)
                    {
                    case 0:
                        this.lnum = streamManipulator_0.PeekBits(5);
                        if (this.lnum >= 0)
                        {
                            this.lnum += 257;
                            streamManipulator_0.DropBits(5);
                            this.mode = 1;
                            goto IL_1E0;
                        }
                        return(false);

                    case 1:
                        goto IL_1E0;

                    case 2:
                        goto IL_192;

                    case 3:
                        goto IL_159;

                    case 4:
                        break;

                    case 5:
                        goto IL_2A;

                    default:
                        continue;
                    }
IL_E4:
                    int symbol;
                    while (((symbol = this.blTree.GetSymbol(streamManipulator_0)) & -16) == 0)
                    {
                        byte[] array = this.litdistLens;
                        int    num   = this.ptr;
                        this.ptr   = num + 1;
                        array[num] = (this.lastLen = (byte)symbol);
                        if (this.ptr == this.num)
                        {
                            return(true);
                        }
                    }
                    if (symbol >= 0)
                    {
                        if (symbol >= 17)
                        {
                            this.lastLen = 0;
                        }
                        this.repSymbol = symbol - 16;
                        this.mode      = 5;
                        goto IL_2A;
                    }
                    return(false);

IL_159:
                    while (this.ptr < this.blnum)
                    {
                        int num2 = streamManipulator_0.PeekBits(3);
                        if (num2 < 0)
                        {
                            return(false);
                        }
                        streamManipulator_0.DropBits(3);
                        this.blLens[ChromV266351.SimpleZip.InflaterDynHeader.BL_ORDER[this.ptr]] = (byte)num2;
                        this.ptr++;
                    }
                    this.blTree = new ChromV266351.SimpleZip.InflaterHuffmanTree(this.blLens);
                    this.blLens = null;
                    this.ptr    = 0;
                    this.mode   = 4;
                    goto IL_E4;
IL_2A:
                    int int_ = ChromV266351.SimpleZip.InflaterDynHeader.repBits[this.repSymbol];
                    int num3 = streamManipulator_0.PeekBits(int_);
                    if (num3 < 0)
                    {
                        return(false);
                    }
                    streamManipulator_0.DropBits(int_);
                    num3 += ChromV266351.SimpleZip.InflaterDynHeader.repMin[this.repSymbol];
                    while (num3-- > 0)
                    {
                        byte[] array2 = this.litdistLens;
                        int    num    = this.ptr;
                        this.ptr    = num + 1;
                        array2[num] = this.lastLen;
                    }
                    if (this.ptr == this.num)
                    {
                        break;
                    }
                    this.mode = 4;
                    continue;
IL_192:
                    this.blnum = streamManipulator_0.PeekBits(4);
                    if (this.blnum >= 0)
                    {
                        this.blnum += 4;
                        streamManipulator_0.DropBits(4);
                        this.blLens = new byte[19];
                        this.ptr    = 0;
                        this.mode   = 3;
                        goto IL_159;
                    }
                    return(false);

IL_1E0:
                    this.dnum = streamManipulator_0.PeekBits(5);
                    if (this.dnum >= 0)
                    {
                        this.dnum++;
                        streamManipulator_0.DropBits(5);
                        this.num         = this.lnum + this.dnum;
                        this.litdistLens = new byte[this.num];
                        this.mode        = 2;
                        goto IL_192;
                    }
                    return(false);
                }
                return(true);
            }