/// <summary>
 /// Ends an inflation session. 
 /// </summary>
 /// <remarks>
 /// Call this after successively calling Inflate().  This will cause all buffers to be flushed. 
 /// After calling this you cannot call Inflate() without a intervening call to one of the
 /// InitializeInflate() overloads.
 /// </remarks>
 /// <returns>Z_OK if everything goes well.</returns>
 public int EndInflate()
 {
     if (istate == null)
         throw new ZlibException("No Inflate State!");
     int ret = istate.End(this);
     istate = null;
     return ret;
 }
 /// <summary>
 /// Initialize the inflation state with an explicit flag to govern the handling of RFC1950 header bytes. 
 /// </summary>
 /// <remarks>
 /// If you want to read a zlib stream 
 /// you should specify true for expectRfc1950Header.  If you have a deflate stream, you will
 /// want to specify false. 
 /// </remarks>
 /// <param name="expectRfc1950Header">whether to expect an RFC1950 header byte pair when reading 
 /// the stream of data to be inflated.</param>
 /// <param name="windowBits">The number of window bits to use. If you need to ask what that is, 
 /// then you shouldn't be calling this initializer.</param>
 /// <returns>Z_OK if everything goes well.</returns>
 public int InitializeInflate(int windowBits, bool expectRfc1950Header)
 {
     istate = new InflateManager(expectRfc1950Header);
     return istate.Initialize(this, windowBits);
 }