예제 #1
0
        private bool CheckDecodeState()
        {
            bool endOfBlock = false;
            bool flag;

            if (this.blockType == DeflateDecompressor.BlockType.Dynamic)
            {
                flag = this.state < DeflateDecompressor.DecompressorState.DecodeTop ? this.DecodeDynamicBlockHeader() : this.DecodeBlock(out endOfBlock);
            }
            else if (this.blockType != DeflateDecompressor.BlockType.Static)
            {
                if (this.blockType != DeflateDecompressor.BlockType.Stored)
                {
                    DeflateDecompressor.ThrowUnknownBlockType();
                }
                flag = this.DecodeUncompressedBlock(out endOfBlock);
            }
            else
            {
                flag = this.DecodeBlock(out endOfBlock);
            }
            if (endOfBlock && this.bfinal != 0)
            {
                this.state = DeflateDecompressor.DecompressorState.Done;
            }
            return(flag);
        }
예제 #2
0
        private void ProcessBlockType()
        {
            this.blockType = (DeflateDecompressor.BlockType) this.input.GetBits(2);
            switch (this.blockType)
            {
            case DeflateDecompressor.BlockType.Stored:
                this.state = DeflateDecompressor.DecompressorState.UncompressedAligning;
                break;

            case DeflateDecompressor.BlockType.Static:
                this.literalLengthTree = InflateTree.StaticLiteralLengthTree;
                this.distanceTree      = InflateTree.StaticDistanceTree;
                this.state             = DeflateDecompressor.DecompressorState.DecodeTop;
                break;

            case DeflateDecompressor.BlockType.Dynamic:
                this.state = DeflateDecompressor.DecompressorState.ReadingNumLitCodes;
                break;

            default:
                DeflateDecompressor.ThrowUnknownBlockType();
                break;
            }
        }