Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/externals/zlib/include/deflate.h

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /externals/zlib/include/deflate.h (Version 11.3.0) and /externals/zlib/include/deflate.h (Version 11.2.2)


  1 /* deflate.h -- internal compression state          1 /* deflate.h -- internal compression state
  2  * Copyright (C) 1995-2018 Jean-loup Gailly         2  * Copyright (C) 1995-2018 Jean-loup Gailly
  3  * For conditions of distribution and use, see      3  * For conditions of distribution and use, see copyright notice in zlib.h
  4  */                                                 4  */
  5                                                     5 
  6 /* WARNING: this file should *not* be used by       6 /* WARNING: this file should *not* be used by applications. It is
  7    part of the implementation of the compressi      7    part of the implementation of the compression library and is
  8    subject to change. Applications should only      8    subject to change. Applications should only use zlib.h.
  9  */                                                 9  */
 10                                                    10 
 11 /* @(#) $Id$ */                                    11 /* @(#) $Id$ */
 12                                                    12 
 13 #ifndef DEFLATE_H                                  13 #ifndef DEFLATE_H
 14 #define DEFLATE_H                                  14 #define DEFLATE_H
 15                                                    15 
 16 #include "zutil.h"                                 16 #include "zutil.h"
 17                                                    17 
 18 /* define NO_GZIP when compiling if you want t     18 /* define NO_GZIP when compiling if you want to disable gzip header and
 19    trailer creation by deflate().  NO_GZIP wou     19    trailer creation by deflate().  NO_GZIP would be used to avoid linking in
 20    the crc code when it is not needed.  For sh     20    the crc code when it is not needed.  For shared libraries, gzip encoding
 21    should be left enabled. */                      21    should be left enabled. */
 22 #ifndef NO_GZIP                                    22 #ifndef NO_GZIP
 23 #  define GZIP                                     23 #  define GZIP
 24 #endif                                             24 #endif
 25                                                    25 
 26 /* ===========================================     26 /* ===========================================================================
 27  * Internal compression state.                     27  * Internal compression state.
 28  */                                                28  */
 29                                                    29 
 30 #define LENGTH_CODES 29                            30 #define LENGTH_CODES 29
 31 /* number of length codes, not counting the sp     31 /* number of length codes, not counting the special END_BLOCK code */
 32                                                    32 
 33 #define LITERALS  256                              33 #define LITERALS  256
 34 /* number of literal bytes 0..255 */               34 /* number of literal bytes 0..255 */
 35                                                    35 
 36 #define L_CODES (LITERALS+1+LENGTH_CODES)          36 #define L_CODES (LITERALS+1+LENGTH_CODES)
 37 /* number of Literal or Length codes, includin     37 /* number of Literal or Length codes, including the END_BLOCK code */
 38                                                    38 
 39 #define D_CODES   30                               39 #define D_CODES   30
 40 /* number of distance codes */                     40 /* number of distance codes */
 41                                                    41 
 42 #define BL_CODES  19                               42 #define BL_CODES  19
 43 /* number of codes used to transfer the bit le     43 /* number of codes used to transfer the bit lengths */
 44                                                    44 
 45 #define HEAP_SIZE (2*L_CODES+1)                    45 #define HEAP_SIZE (2*L_CODES+1)
 46 /* maximum heap size */                            46 /* maximum heap size */
 47                                                    47 
 48 #define MAX_BITS 15                                48 #define MAX_BITS 15
 49 /* All codes must not exceed MAX_BITS bits */      49 /* All codes must not exceed MAX_BITS bits */
 50                                                    50 
 51 #define Buf_size 16                                51 #define Buf_size 16
 52 /* size of bit buffer in bi_buf */                 52 /* size of bit buffer in bi_buf */
 53                                                    53 
 54 #define INIT_STATE    42    /* zlib header ->      54 #define INIT_STATE    42    /* zlib header -> BUSY_STATE */
 55 #ifdef GZIP                                        55 #ifdef GZIP
 56 #  define GZIP_STATE  57    /* gzip header ->      56 #  define GZIP_STATE  57    /* gzip header -> BUSY_STATE | EXTRA_STATE */
 57 #endif                                             57 #endif
 58 #define EXTRA_STATE   69    /* gzip extra bloc     58 #define EXTRA_STATE   69    /* gzip extra block -> NAME_STATE */
 59 #define NAME_STATE    73    /* gzip file name      59 #define NAME_STATE    73    /* gzip file name -> COMMENT_STATE */
 60 #define COMMENT_STATE 91    /* gzip comment ->     60 #define COMMENT_STATE 91    /* gzip comment -> HCRC_STATE */
 61 #define HCRC_STATE   103    /* gzip header CRC     61 #define HCRC_STATE   103    /* gzip header CRC -> BUSY_STATE */
 62 #define BUSY_STATE   113    /* deflate -> FINI     62 #define BUSY_STATE   113    /* deflate -> FINISH_STATE */
 63 #define FINISH_STATE 666    /* stream complete     63 #define FINISH_STATE 666    /* stream complete */
 64 /* Stream status */                                64 /* Stream status */
 65                                                    65 
 66                                                    66 
 67 /* Data structure describing a single value an     67 /* Data structure describing a single value and its code string. */
 68 typedef struct ct_data_s {                         68 typedef struct ct_data_s {
 69     union {                                        69     union {
 70         ush  freq;       /* frequency count */     70         ush  freq;       /* frequency count */
 71         ush  code;       /* bit string */          71         ush  code;       /* bit string */
 72     } fc;                                          72     } fc;
 73     union {                                        73     union {
 74         ush  dad;        /* father node in Huf     74         ush  dad;        /* father node in Huffman tree */
 75         ush  len;        /* length of bit stri     75         ush  len;        /* length of bit string */
 76     } dl;                                          76     } dl;
 77 } FAR ct_data;                                     77 } FAR ct_data;
 78                                                    78 
 79 #define Freq fc.freq                               79 #define Freq fc.freq
 80 #define Code fc.code                               80 #define Code fc.code
 81 #define Dad  dl.dad                                81 #define Dad  dl.dad
 82 #define Len  dl.len                                82 #define Len  dl.len
 83                                                    83 
 84 typedef struct static_tree_desc_s  static_tree     84 typedef struct static_tree_desc_s  static_tree_desc;
 85                                                    85 
 86 typedef struct tree_desc_s {                       86 typedef struct tree_desc_s {
 87     ct_data *dyn_tree;           /* the dynami     87     ct_data *dyn_tree;           /* the dynamic tree */
 88     int     max_code;            /* largest co     88     int     max_code;            /* largest code with non zero frequency */
 89     const static_tree_desc *stat_desc;  /* the     89     const static_tree_desc *stat_desc;  /* the corresponding static tree */
 90 } FAR tree_desc;                                   90 } FAR tree_desc;
 91                                                    91 
 92 typedef ush Pos;                                   92 typedef ush Pos;
 93 typedef Pos FAR Posf;                              93 typedef Pos FAR Posf;
 94 typedef unsigned IPos;                             94 typedef unsigned IPos;
 95                                                    95 
 96 /* A Pos is an index in the character window.      96 /* A Pos is an index in the character window. We use short instead of int to
 97  * save space in the various tables. IPos is u     97  * save space in the various tables. IPos is used only for parameter passing.
 98  */                                                98  */
 99                                                    99 
100 typedef struct internal_state {                   100 typedef struct internal_state {
101     z_streamp strm;      /* pointer back to th    101     z_streamp strm;      /* pointer back to this zlib stream */
102     int   status;        /* as the name implie    102     int   status;        /* as the name implies */
103     Bytef *pending_buf;  /* output still pendi    103     Bytef *pending_buf;  /* output still pending */
104     ulg   pending_buf_size; /* size of pending    104     ulg   pending_buf_size; /* size of pending_buf */
105     Bytef *pending_out;  /* next pending byte     105     Bytef *pending_out;  /* next pending byte to output to the stream */
106     ulg   pending;       /* nb of bytes in the    106     ulg   pending;       /* nb of bytes in the pending buffer */
107     int   wrap;          /* bit 0 true for zli    107     int   wrap;          /* bit 0 true for zlib, bit 1 true for gzip */
108     gz_headerp  gzhead;  /* gzip header inform    108     gz_headerp  gzhead;  /* gzip header information to write */
109     ulg   gzindex;       /* where in extra, na    109     ulg   gzindex;       /* where in extra, name, or comment */
110     Byte  method;        /* can only be DEFLAT    110     Byte  method;        /* can only be DEFLATED */
111     int   last_flush;    /* value of flush par    111     int   last_flush;    /* value of flush param for previous deflate call */
112                                                   112 
113                 /* used by deflate.c: */          113                 /* used by deflate.c: */
114                                                   114 
115     uInt  w_size;        /* LZ77 window size (    115     uInt  w_size;        /* LZ77 window size (32K by default) */
116     uInt  w_bits;        /* log2(w_size)  (8..    116     uInt  w_bits;        /* log2(w_size)  (8..16) */
117     uInt  w_mask;        /* w_size - 1 */         117     uInt  w_mask;        /* w_size - 1 */
118                                                   118 
119     Bytef *window;                                119     Bytef *window;
120     /* Sliding window. Input bytes are read in    120     /* Sliding window. Input bytes are read into the second half of the window,
121      * and move to the first half later to kee    121      * and move to the first half later to keep a dictionary of at least wSize
122      * bytes. With this organization, matches     122      * bytes. With this organization, matches are limited to a distance of
123      * wSize-MAX_MATCH bytes, but this ensures    123      * wSize-MAX_MATCH bytes, but this ensures that IO is always
124      * performed with a length multiple of the    124      * performed with a length multiple of the block size. Also, it limits
125      * the window size to 64K, which is quite     125      * the window size to 64K, which is quite useful on MSDOS.
126      * To do: use the user input buffer as sli    126      * To do: use the user input buffer as sliding window.
127      */                                           127      */
128                                                   128 
129     ulg window_size;                              129     ulg window_size;
130     /* Actual size of window: 2*wSize, except     130     /* Actual size of window: 2*wSize, except when the user input buffer
131      * is directly used as sliding window.        131      * is directly used as sliding window.
132      */                                           132      */
133                                                   133 
134     Posf *prev;                                   134     Posf *prev;
135     /* Link to older string with same hash ind    135     /* Link to older string with same hash index. To limit the size of this
136      * array to 64K, this link is maintained o    136      * array to 64K, this link is maintained only for the last 32K strings.
137      * An index in this array is thus a window    137      * An index in this array is thus a window index modulo 32K.
138      */                                           138      */
139                                                   139 
140     Posf *head; /* Heads of the hash chains or    140     Posf *head; /* Heads of the hash chains or NIL. */
141                                                   141 
142     uInt  ins_h;          /* hash index of str    142     uInt  ins_h;          /* hash index of string to be inserted */
143     uInt  hash_size;      /* number of element    143     uInt  hash_size;      /* number of elements in hash table */
144     uInt  hash_bits;      /* log2(hash_size) *    144     uInt  hash_bits;      /* log2(hash_size) */
145     uInt  hash_mask;      /* hash_size-1 */       145     uInt  hash_mask;      /* hash_size-1 */
146                                                   146 
147     uInt  hash_shift;                             147     uInt  hash_shift;
148     /* Number of bits by which ins_h must be s    148     /* Number of bits by which ins_h must be shifted at each input
149      * step. It must be such that after MIN_MA    149      * step. It must be such that after MIN_MATCH steps, the oldest
150      * byte no longer takes part in the hash k    150      * byte no longer takes part in the hash key, that is:
151      *   hash_shift * MIN_MATCH >= hash_bits      151      *   hash_shift * MIN_MATCH >= hash_bits
152      */                                           152      */
153                                                   153 
154     long block_start;                             154     long block_start;
155     /* Window position at the beginning of the    155     /* Window position at the beginning of the current output block. Gets
156      * negative when the window is moved backw    156      * negative when the window is moved backwards.
157      */                                           157      */
158                                                   158 
159     uInt match_length;           /* length of     159     uInt match_length;           /* length of best match */
160     IPos prev_match;             /* previous m    160     IPos prev_match;             /* previous match */
161     int match_available;         /* set if pre    161     int match_available;         /* set if previous match exists */
162     uInt strstart;               /* start of s    162     uInt strstart;               /* start of string to insert */
163     uInt match_start;            /* start of m    163     uInt match_start;            /* start of matching string */
164     uInt lookahead;              /* number of     164     uInt lookahead;              /* number of valid bytes ahead in window */
165                                                   165 
166     uInt prev_length;                             166     uInt prev_length;
167     /* Length of the best match at previous st    167     /* Length of the best match at previous step. Matches not greater than this
168      * are discarded. This is used in the lazy    168      * are discarded. This is used in the lazy match evaluation.
169      */                                           169      */
170                                                   170 
171     uInt max_chain_length;                        171     uInt max_chain_length;
172     /* To speed up deflation, hash chains are     172     /* To speed up deflation, hash chains are never searched beyond this
173      * length.  A higher limit improves compre    173      * length.  A higher limit improves compression ratio but degrades the
174      * speed.                                     174      * speed.
175      */                                           175      */
176                                                   176 
177     uInt max_lazy_match;                          177     uInt max_lazy_match;
178     /* Attempt to find a better match only whe    178     /* Attempt to find a better match only when the current match is strictly
179      * smaller than this value. This mechanism    179      * smaller than this value. This mechanism is used only for compression
180      * levels >= 4.                               180      * levels >= 4.
181      */                                           181      */
182 #   define max_insert_length  max_lazy_match      182 #   define max_insert_length  max_lazy_match
183     /* Insert new strings in the hash table on    183     /* Insert new strings in the hash table only if the match length is not
184      * greater than this length. This saves ti    184      * greater than this length. This saves time but degrades compression.
185      * max_insert_length is used only for comp    185      * max_insert_length is used only for compression levels <= 3.
186      */                                           186      */
187                                                   187 
188     int level;    /* compression level (1..9)     188     int level;    /* compression level (1..9) */
189     int strategy; /* favor or force Huffman co    189     int strategy; /* favor or force Huffman coding*/
190                                                   190 
191     uInt good_match;                              191     uInt good_match;
192     /* Use a faster search when the previous m    192     /* Use a faster search when the previous match is longer than this */
193                                                   193 
194     int nice_match; /* Stop searching when cur    194     int nice_match; /* Stop searching when current match exceeds this */
195                                                   195 
196                 /* used by trees.c: */            196                 /* used by trees.c: */
197     /* Didn't use ct_data typedef below to sup    197     /* Didn't use ct_data typedef below to suppress compiler warning */
198     struct ct_data_s dyn_ltree[HEAP_SIZE];   /    198     struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */
199     struct ct_data_s dyn_dtree[2*D_CODES+1]; /    199     struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
200     struct ct_data_s bl_tree[2*BL_CODES+1];  /    200     struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */
201                                                   201 
202     struct tree_desc_s l_desc;               /    202     struct tree_desc_s l_desc;               /* desc. for literal tree */
203     struct tree_desc_s d_desc;               /    203     struct tree_desc_s d_desc;               /* desc. for distance tree */
204     struct tree_desc_s bl_desc;              /    204     struct tree_desc_s bl_desc;              /* desc. for bit length tree */
205                                                   205 
206     ush bl_count[MAX_BITS+1];                     206     ush bl_count[MAX_BITS+1];
207     /* number of codes at each bit length for     207     /* number of codes at each bit length for an optimal tree */
208                                                   208 
209     int heap[2*L_CODES+1];      /* heap used t    209     int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */
210     int heap_len;               /* number of e    210     int heap_len;               /* number of elements in the heap */
211     int heap_max;               /* element of     211     int heap_max;               /* element of largest frequency */
212     /* The sons of heap[n] are heap[2*n] and h    212     /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
213      * The same heap array is used to build al    213      * The same heap array is used to build all trees.
214      */                                           214      */
215                                                   215 
216     uch depth[2*L_CODES+1];                       216     uch depth[2*L_CODES+1];
217     /* Depth of each subtree used as tie break    217     /* Depth of each subtree used as tie breaker for trees of equal frequency
218      */                                           218      */
219                                                   219 
220     uchf *sym_buf;        /* buffer for distan    220     uchf *sym_buf;        /* buffer for distances and literals/lengths */
221                                                   221 
222     uInt  lit_bufsize;                            222     uInt  lit_bufsize;
223     /* Size of match buffer for literals/lengt    223     /* Size of match buffer for literals/lengths.  There are 4 reasons for
224      * limiting lit_bufsize to 64K:               224      * limiting lit_bufsize to 64K:
225      *   - frequencies can be kept in 16 bit c    225      *   - frequencies can be kept in 16 bit counters
226      *   - if compression is not successful fo    226      *   - if compression is not successful for the first block, all input
227      *     data is still in the window so we c    227      *     data is still in the window so we can still emit a stored block even
228      *     when input comes from standard inpu    228      *     when input comes from standard input.  (This can also be done for
229      *     all blocks if lit_bufsize is not gr    229      *     all blocks if lit_bufsize is not greater than 32K.)
230      *   - if compression is not successful fo    230      *   - if compression is not successful for a file smaller than 64K, we can
231      *     even emit a stored file instead of     231      *     even emit a stored file instead of a stored block (saving 5 bytes).
232      *     This is applicable only for zip (no    232      *     This is applicable only for zip (not gzip or zlib).
233      *   - creating new Huffman trees less fre    233      *   - creating new Huffman trees less frequently may not provide fast
234      *     adaptation to changes in the input     234      *     adaptation to changes in the input data statistics. (Take for
235      *     example a binary file with poorly c    235      *     example a binary file with poorly compressible code followed by
236      *     a highly compressible string table.    236      *     a highly compressible string table.) Smaller buffer sizes give
237      *     fast adaptation but have of course     237      *     fast adaptation but have of course the overhead of transmitting
238      *     trees more frequently.                 238      *     trees more frequently.
239      *   - I can't count above 4                  239      *   - I can't count above 4
240      */                                           240      */
241                                                   241 
242     uInt sym_next;      /* running index in sy    242     uInt sym_next;      /* running index in sym_buf */
243     uInt sym_end;       /* symbol table full w    243     uInt sym_end;       /* symbol table full when sym_next reaches this */
244                                                   244 
245     ulg opt_len;        /* bit length of curre    245     ulg opt_len;        /* bit length of current block with optimal trees */
246     ulg static_len;     /* bit length of curre    246     ulg static_len;     /* bit length of current block with static trees */
247     uInt matches;       /* number of string ma    247     uInt matches;       /* number of string matches in current block */
248     uInt insert;        /* bytes at end of win    248     uInt insert;        /* bytes at end of window left to insert */
249                                                   249 
250 #ifdef ZLIB_DEBUG                                 250 #ifdef ZLIB_DEBUG
251     ulg compressed_len; /* total bit length of    251     ulg compressed_len; /* total bit length of compressed file mod 2^32 */
252     ulg bits_sent;      /* bit length of compr    252     ulg bits_sent;      /* bit length of compressed data sent mod 2^32 */
253 #endif                                            253 #endif
254                                                   254 
255     ush bi_buf;                                   255     ush bi_buf;
256     /* Output buffer. bits are inserted starti    256     /* Output buffer. bits are inserted starting at the bottom (least
257      * significant bits).                         257      * significant bits).
258      */                                           258      */
259     int bi_valid;                                 259     int bi_valid;
260     /* Number of valid bits in bi_buf.  All bi    260     /* Number of valid bits in bi_buf.  All bits above the last valid bit
261      * are always zero.                           261      * are always zero.
262      */                                           262      */
263                                                   263 
264     ulg high_water;                               264     ulg high_water;
265     /* High water mark offset in window for in    265     /* High water mark offset in window for initialized bytes -- bytes above
266      * this are set to zero in order to avoid     266      * this are set to zero in order to avoid memory check warnings when
267      * longest match routines access bytes pas    267      * longest match routines access bytes past the input.  This is then
268      * updated to the new high water mark.        268      * updated to the new high water mark.
269      */                                           269      */
270                                                   270 
271 } FAR deflate_state;                              271 } FAR deflate_state;
272                                                   272 
273 /* Output a byte on the stream.                   273 /* Output a byte on the stream.
274  * IN assertion: there is enough room in pendi    274  * IN assertion: there is enough room in pending_buf.
275  */                                               275  */
276 #define put_byte(s, c) {s->pending_buf[s->pend    276 #define put_byte(s, c) {s->pending_buf[s->pending++] = (Bytef)(c);}
277                                                   277 
278                                                   278 
279 #define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)     279 #define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
280 /* Minimum amount of lookahead, except at the     280 /* Minimum amount of lookahead, except at the end of the input file.
281  * See deflate.c for comments about the MIN_MA    281  * See deflate.c for comments about the MIN_MATCH+1.
282  */                                               282  */
283                                                   283 
284 #define MAX_DIST(s)  ((s)->w_size-MIN_LOOKAHEA    284 #define MAX_DIST(s)  ((s)->w_size-MIN_LOOKAHEAD)
285 /* In order to simplify the code, particularly    285 /* In order to simplify the code, particularly on 16 bit machines, match
286  * distances are limited to MAX_DIST instead o    286  * distances are limited to MAX_DIST instead of WSIZE.
287  */                                               287  */
288                                                   288 
289 #define WIN_INIT MAX_MATCH                        289 #define WIN_INIT MAX_MATCH
290 /* Number of bytes after end of data in window    290 /* Number of bytes after end of data in window to initialize in order to avoid
291    memory checker errors from longest match ro    291    memory checker errors from longest match routines */
292                                                   292 
293         /* in trees.c */                          293         /* in trees.c */
294 void ZLIB_INTERNAL _tr_init OF((deflate_state     294 void ZLIB_INTERNAL _tr_init OF((deflate_state *s));
295 int ZLIB_INTERNAL _tr_tally OF((deflate_state     295 int ZLIB_INTERNAL _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc));
296 void ZLIB_INTERNAL _tr_flush_block OF((deflate    296 void ZLIB_INTERNAL _tr_flush_block OF((deflate_state *s, charf *buf,
297                         ulg stored_len, int la    297                         ulg stored_len, int last));
298 void ZLIB_INTERNAL _tr_flush_bits OF((deflate_    298 void ZLIB_INTERNAL _tr_flush_bits OF((deflate_state *s));
299 void ZLIB_INTERNAL _tr_align OF((deflate_state    299 void ZLIB_INTERNAL _tr_align OF((deflate_state *s));
300 void ZLIB_INTERNAL _tr_stored_block OF((deflat    300 void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf,
301                         ulg stored_len, int la    301                         ulg stored_len, int last));
302                                                   302 
303 #define d_code(dist) \                            303 #define d_code(dist) \
304    ((dist) < 256 ? _dist_code[dist] : _dist_co    304    ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)])
305 /* Mapping from a distance to a distance code.    305 /* Mapping from a distance to a distance code. dist is the distance - 1 and
306  * must not have side effects. _dist_code[256]    306  * must not have side effects. _dist_code[256] and _dist_code[257] are never
307  * used.                                          307  * used.
308  */                                               308  */
309                                                   309 
310 #ifndef ZLIB_DEBUG                                310 #ifndef ZLIB_DEBUG
311 /* Inline versions of _tr_tally for speed: */     311 /* Inline versions of _tr_tally for speed: */
312                                                   312 
313 #if defined(GEN_TREES_H) || !defined(STDC)        313 #if defined(GEN_TREES_H) || !defined(STDC)
314   extern uch ZLIB_INTERNAL _length_code[];        314   extern uch ZLIB_INTERNAL _length_code[];
315   extern uch ZLIB_INTERNAL _dist_code[];          315   extern uch ZLIB_INTERNAL _dist_code[];
316 #else                                             316 #else
317   extern const uch ZLIB_INTERNAL _length_code[    317   extern const uch ZLIB_INTERNAL _length_code[];
318   extern const uch ZLIB_INTERNAL _dist_code[];    318   extern const uch ZLIB_INTERNAL _dist_code[];
319 #endif                                            319 #endif
320                                                   320 
321 # define _tr_tally_lit(s, c, flush) \             321 # define _tr_tally_lit(s, c, flush) \
322   { uch cc = (c); \                               322   { uch cc = (c); \
323     s->sym_buf[s->sym_next++] = 0; \              323     s->sym_buf[s->sym_next++] = 0; \
324     s->sym_buf[s->sym_next++] = 0; \              324     s->sym_buf[s->sym_next++] = 0; \
325     s->sym_buf[s->sym_next++] = cc; \             325     s->sym_buf[s->sym_next++] = cc; \
326     s->dyn_ltree[cc].Freq++; \                    326     s->dyn_ltree[cc].Freq++; \
327     flush = (s->sym_next == s->sym_end); \        327     flush = (s->sym_next == s->sym_end); \
328    }                                              328    }
329 # define _tr_tally_dist(s, distance, length, f    329 # define _tr_tally_dist(s, distance, length, flush) \
330   { uch len = (uch)(length); \                    330   { uch len = (uch)(length); \
331     ush dist = (ush)(distance); \                 331     ush dist = (ush)(distance); \
332     s->sym_buf[s->sym_next++] = (uch)dist; \      332     s->sym_buf[s->sym_next++] = (uch)dist; \
333     s->sym_buf[s->sym_next++] = (uch)(dist >>     333     s->sym_buf[s->sym_next++] = (uch)(dist >> 8); \
334     s->sym_buf[s->sym_next++] = len; \            334     s->sym_buf[s->sym_next++] = len; \
335     dist--; \                                     335     dist--; \
336     s->dyn_ltree[_length_code[len]+LITERALS+1]    336     s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \
337     s->dyn_dtree[d_code(dist)].Freq++; \          337     s->dyn_dtree[d_code(dist)].Freq++; \
338     flush = (s->sym_next == s->sym_end); \        338     flush = (s->sym_next == s->sym_end); \
339   }                                               339   }
340 #else                                             340 #else
341 # define _tr_tally_lit(s, c, flush) flush = _t    341 # define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c)
342 # define _tr_tally_dist(s, distance, length, f    342 # define _tr_tally_dist(s, distance, length, flush) \
343               flush = _tr_tally(s, distance, l    343               flush = _tr_tally(s, distance, length)
344 #endif                                            344 #endif
345                                                   345 
346 #endif /* DEFLATE_H */                            346 #endif /* DEFLATE_H */
347                                                   347