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