ComponentAce.Compression.Libs.ZLib.Deflate.deflateInit2 C# (CSharp) Method

deflateInit2() private method

Deflate algorithm initialization
private deflateInit2 ( ZStream strm, int level, int method, int windowBits, int memLevel, CompressionStrategy strategy ) : int
strm ZStream ZStream object
level int Compression level
method int Compression method
windowBits int Window bits
memLevel int Memory level
strategy CompressionStrategy Compression strategy
return int
        internal int deflateInit2(ZStream strm, int level, int method, int windowBits, int memLevel, CompressionStrategy strategy)
        {
            int noheader = 0;

            strm.msg = null;

            if (level == Z_DEFAULT_COMPRESSION)
                level = 6;

            if (windowBits < 0)
            {
                // undocumented feature: suppress zlib header
                noheader = 1;
                windowBits = -windowBits;
            }

            if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED || windowBits < 9 || windowBits > 15 || level < 0 || level > 9 || strategy < 0 || strategy > CompressionStrategy.Z_HUFFMAN_ONLY)
            {
                return (int)ZLibResultCode.Z_STREAM_ERROR;
            }

            strm.dstate = (Deflate)this;

            this.NoHeader = noheader;
            w_bits = windowBits;
            w_size = 1 << w_bits;
            w_mask = w_size - 1;

            hash_bits = memLevel + 7;
            hash_size = 1 << hash_bits;
            hash_mask = hash_size - 1;
            hash_shift = ((hash_bits + MIN_MATCH - 1) / MIN_MATCH);

            window = new byte[w_size * 2];
            prev = new short[w_size];
            head = new short[hash_size];

            lit_bufsize = 1 << (memLevel + 6); // 16K elements by default

            // We overlay Pending_buf and d_buf+l_buf. This works since the average
            // output size for (length,distance) codes is <= 24 bits.
            Pending_buf = new byte[lit_bufsize * 4];
            pending_buf_size = lit_bufsize * 4;

            d_buf = lit_bufsize;
            l_buf = (1 + 2) * lit_bufsize;

            this.level = level;

            this.strategy = strategy;
            this.method = (byte)method;

            return deflateReset(strm);
        }

Usage Example

Example #1
0
 public int deflateInit(int level, int windowBits, int memLevel, CompressionStrategy strategy) {
     _dstate = new Deflate();
     return _dstate.deflateInit2(this, level, windowBits, memLevel, strategy);
 }