// This ctor is private - no validation is done here.  This is to allow the use
 // of a (specific) negative value for the _lengthLimit, to indicate that there
 // is no length set.  So we validate the length limit in those ctors that use an
 // explicit param, otherwise we don't validate, because it could be our special
 // value.
 private CrcCalculatorStream
     (bool leaveOpen, Int64 length, System.IO.Stream stream, CRC32 crc32)
     : base()
 {
     _innerStream = stream;
     _Crc32 = crc32 ?? new CRC32();
     _lengthLimit = length;
     _leaveOpen = leaveOpen;
 }
 public ZlibBaseStream(System.IO.Stream stream,
                       CompressionMode compressionMode,
                       CompressionLevel level,
                       ZlibStreamFlavor flavor,
                       bool leaveOpen)
     : base()
 {
     this._flushMode = FlushType.None;
     //this._workingBuffer = new byte[WORKING_BUFFER_SIZE_DEFAULT];
     this._stream = stream;
     this._leaveOpen = leaveOpen;
     this._compressionMode = compressionMode;
     this._flavor = flavor;
     this._level = level;
     // workitem 7159
     if (flavor == ZlibStreamFlavor.GZIP)
     {
         this.crc = new CRC32();
     }
 }
 /// <summary>
 ///   A constructor allowing the specification of the length of the stream
 ///   to read, as well as whether to keep the underlying stream open upon
 ///   Close(), and the CRC32 instance to use.
 /// </summary>
 /// <remarks>
 ///   <para>
 ///     The stream uses the specified CRC32 instance, which allows the
 ///     application to specify how the CRC gets calculated.
 ///   </para>
 /// </remarks>
 /// <param name="stream">The underlying stream</param>
 /// <param name="length">The length of the stream to slurp</param>
 /// <param name="leaveOpen">true to leave the underlying stream
 /// open upon close of the <c>CrcCalculatorStream</c>; false otherwise.</param>
 /// <param name="crc32">the CRC32 instance to use to calculate the CRC32</param>
 public CrcCalculatorStream(System.IO.Stream stream, Int64 length, bool leaveOpen,
                            CRC32 crc32)
     : this(leaveOpen, length, stream, crc32)
 {
     if (length < 0)
         throw new ArgumentException("length");
 }