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



Page generated by Doxygen 1.8.14 for MRPT 1.9.9 Git: 8fe78517f Sun Jul 14 19:43:28 2019 +0200 at lun oct 28 02:10:00 CET 2019