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); }
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; } }