1592N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 1592N/A * This code is free software; you can redistribute it and/or modify it 1592N/A * under the terms of the GNU General Public License version 2 only, as 2362N/A * published by the Free Software Foundation. Oracle designates this 1592N/A * particular file as subject to the "Classpath" exception as provided 2362N/A * by Oracle in the LICENSE file that accompanied this code. 1592N/A * This code is distributed in the hope that it will be useful, but WITHOUT 1592N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 1592N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1592N/A * version 2 for more details (a copy is included in the LICENSE file that 1592N/A * You should have received a copy of the GNU General Public License version 1592N/A * 2 along with this work; if not, write to the Free Software Foundation, 1592N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 2362N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 1592N/A * Copyright (C) 1995-2004 Jean-loup Gailly 1592N/A * For conditions of distribution and use, see copyright notice in zlib.h 1592N/A/* WARNING: this file should *not* be used by applications. It is 1592N/A part of the implementation of the compression library and is 1592N/A/* define NO_GZIP when compiling if you want to disable gzip header and 1592N/A trailer creation by deflate(). NO_GZIP would be used to avoid linking in 1592N/A the crc code when it is not needed. For shared libraries, gzip encoding 1592N/A/* =========================================================================== 1592N/A * Internal compression state. 1592N/A/* number of length codes, not counting the special END_BLOCK code */ 1592N/A/* number of literal bytes 0..255 */ 1592N/A/* number of Literal or Length codes, including the END_BLOCK code */ 1592N/A/* number of distance codes */ 1592N/A/* number of codes used to transfer the bit lengths */ 1592N/A/* All codes must not exceed MAX_BITS bits */ 1592N/A/* Data structure describing a single value and its code string. */ 1592N/A/* A Pos is an index in the character window. We use short instead of int to 1592N/A * save space in the various tables. IPos is used only for parameter passing. 1592N/A int wrap;
/* bit 0 true for zlib, bit 1 true for gzip */ 1592N/A /* Sliding window. Input bytes are read into the second half of the window, 1592N/A * and move to the first half later to keep a dictionary of at least wSize 1592N/A * bytes. With this organization, matches are limited to a distance of 1592N/A * wSize-MAX_MATCH bytes, but this ensures that IO is always 1592N/A * performed with a length multiple of the block size. Also, it limits 1592N/A * the window size to 64K, which is quite useful on MSDOS. 1592N/A * To do: use the user input buffer as sliding window. 1592N/A /* Actual size of window: 2*wSize, except when the user input buffer 1592N/A * is directly used as sliding window. 1592N/A /* Link to older string with same hash index. To limit the size of this 1592N/A * array to 64K, this link is maintained only for the last 32K strings. 1592N/A * An index in this array is thus a window index modulo 32K. 1592N/A /* Number of bits by which ins_h must be shifted at each input 1592N/A * step. It must be such that after MIN_MATCH steps, the oldest 1592N/A * byte no longer takes part in the hash key, that is: 1592N/A * hash_shift * MIN_MATCH >= hash_bits 1592N/A /* Window position at the beginning of the current output block. Gets 1592N/A * negative when the window is moved backwards. 1592N/A /* Length of the best match at previous step. Matches not greater than this 1592N/A * are discarded. This is used in the lazy match evaluation. 1592N/A /* To speed up deflation, hash chains are never searched beyond this 1592N/A * length. A higher limit improves compression ratio but degrades the 1592N/A /* Attempt to find a better match only when the current match is strictly 1592N/A * smaller than this value. This mechanism is used only for compression 1592N/A /* Insert new strings in the hash table only if the match length is not 1592N/A * greater than this length. This saves time but degrades compression. 1592N/A * max_insert_length is used only for compression levels <= 3. 1592N/A /* Use a faster search when the previous match is longer than this */ 1592N/A /* Didn't use ct_data typedef below to supress compiler warning */ 1592N/A /* number of codes at each bit length for an optimal tree */ 1592N/A /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. 1592N/A * The same heap array is used to build all trees. 1592N/A /* Depth of each subtree used as tie breaker for trees of equal frequency 1592N/A * limiting lit_bufsize to 64K: 1592N/A * - frequencies can be kept in 16 bit counters 1592N/A * - if compression is not successful for the first block, all input 1592N/A * data is still in the window so we can still emit a stored block even 1592N/A * when input comes from standard input. (This can also be done for 1592N/A * all blocks if lit_bufsize is not greater than 32K.) 1592N/A * - if compression is not successful for a file smaller than 64K, we can 1592N/A * even emit a stored file instead of a stored block (saving 5 bytes). 1592N/A * This is applicable only for zip (not gzip or zlib). 1592N/A * - creating new Huffman trees less frequently may not provide fast 1592N/A * adaptation to changes in the input data statistics. (Take for 1592N/A * example a binary file with poorly compressible code followed by 1592N/A * a highly compressible string table.) Smaller buffer sizes give 1592N/A * fast adaptation but have of course the overhead of transmitting 1592N/A /* Buffer for distances. To simplify the code, d_buf and l_buf have 1592N/A * the same number of elements. To use different lengths, an extra flag 1592N/A * array would be necessary. 1592N/A /* Output buffer. bits are inserted starting at the bottom (least 1592N/A /* Number of valid bits in bi_buf. All bits above the last valid bit 1592N/A/* Output a byte on the stream. 1592N/A * IN assertion: there is enough room in pending_buf. 1592N/A/* Minimum amount of lookahead, except at the end of the input file. 1592N/A/* In order to simplify the code, particularly on 16 bit machines, match 1592N/A * distances are limited to MAX_DIST instead of WSIZE. 1592N/A/* Mapping from a distance to a distance code. dist is the distance - 1 and 1592N/A * must not have side effects. _dist_code[256] and _dist_code[257] are never 1592N/A/* Inline versions of _tr_tally for speed: */