NetWrok.HTTP.Zlib.DeflateManager.compress_block C# (CSharp) Method

compress_block() private method

private compress_block ( short ltree, short dtree ) : void
ltree short
dtree short
return void
        internal void compress_block(short[] ltree, short[] dtree)
        {
            int dist; // distance of matched string
            int lc; // match length or unmatched char (if dist == 0)
            int lx = 0; // running index in l_buf
            int code; // the code to send
            int extra; // number of extra bits to send

            if (last_lit != 0) {
                do {
                    dist = ((pending [d_buf + lx * 2] << 8) & 0xff00) | (pending [d_buf + lx * 2 + 1] & 0xff);
                    lc = (pending [l_buf + lx]) & 0xff;
                    lx++;

                    if (dist == 0) {
                        send_code (lc, ltree); // send a literal byte
                    } else {
                        // Here, lc is the match length - MIN_MATCH
                        code = ZTree._length_code [lc];

                        send_code (code + LITERALS + 1, ltree); // send the length code
                        extra = ZTree.extra_lbits [code];
                        if (extra != 0) {
                            lc -= ZTree.base_length [code];
                            send_bits (lc, extra); // send the extra length bits
                        }
                        dist--; // dist is now the match distance - 1
                        code = ZTree.d_code (dist);

                        send_code (code, dtree); // send the distance code
                        extra = ZTree.extra_dbits [code];
                        if (extra != 0) {
                            dist -= ZTree.base_dist [code];
                            send_bits (dist, extra); // send the extra distance bits
                        }
                    } // literal or match pair ?

                    // Check that the overlay between pending_buf and d_buf+l_buf is ok:
                } while (lx < last_lit);
            }

            send_code (END_BLOCK, ltree);
            last_eob_len = ltree [END_BLOCK * 2 + 1];
        }