Biomedical Image Analysis Library
The Biomedical Image Analysis Library is a poweful tool for developers, physicians, researchers, engineers, and so on.
Main Page
Modules
Namespaces
Classes
Files
File List
File Members
deflate.h
Go to the documentation of this file.
1
/* deflate.h -- internal compression state
2
* Copyright (C) 1995-2012 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$ */
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 Buf_size 16
52
/* size of bit buffer in bi_buf */
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
64
/* Data structure describing a single value and its code string. */
65
typedef
struct
ct_data_s {
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
ct_data
*
dyn_tree
;
/* the dynamic tree */
85
int
max_code
;
/* largest code with non zero frequency */
86
static_tree_desc *
stat_desc
;
/* the corresponding static tree */
87
}
FAR
tree_desc
;
88
89
typedef
ush
Pos
;
90
typedef
Pos
FAR
Posf
;
91
typedef
unsigned
IPos
;
92
93
/* A Pos is an index in the character window. We use short instead of int to
94
* save space in the various tables. IPos is used only for parameter passing.
95
*/
96
97
typedef
struct
internal_state
{
98
z_streamp
strm
;
/* pointer back to this zlib stream */
99
int
status
;
/* as the name implies */
100
Bytef
*
pending_buf
;
/* output still pending */
101
ulg
pending_buf_size
;
/* size of pending_buf */
102
Bytef
*
pending_out
;
/* next pending byte to output to the stream */
103
uInt
pending
;
/* nb of bytes in the pending buffer */
104
int
wrap
;
/* bit 0 true for zlib, bit 1 true for gzip */
105
gz_headerp
gzhead
;
/* gzip header information to write */
106
uInt
gzindex
;
/* where in extra, name, or comment */
107
Byte
method
;
/* can only be DEFLATED */
108
int
last_flush
;
/* value of flush param for previous deflate call */
109
110
/* used by deflate.c: */
111
112
uInt
w_size
;
/* LZ77 window size (32K by default) */
113
uInt
w_bits
;
/* log2(w_size) (8..16) */
114
uInt
w_mask
;
/* w_size - 1 */
115
116
Bytef
*
window
;
117
/* Sliding window. Input bytes are read into the second half of the window,
118
* and move to the first half later to keep a dictionary of at least wSize
119
* bytes. With this organization, matches are limited to a distance of
120
* wSize-MAX_MATCH bytes, but this ensures that IO is always
121
* performed with a length multiple of the block size. Also, it limits
122
* the window size to 64K, which is quite useful on MSDOS.
123
* To do: use the user input buffer as sliding window.
124
*/
125
126
ulg
window_size
;
127
/* Actual size of window: 2*wSize, except when the user input buffer
128
* is directly used as sliding window.
129
*/
130
131
Posf
*
prev
;
132
/* Link to older string with same hash index. To limit the size of this
133
* array to 64K, this link is maintained only for the last 32K strings.
134
* An index in this array is thus a window index modulo 32K.
135
*/
136
137
Posf
*
head
;
/* Heads of the hash chains or NIL. */
138
139
uInt
ins_h
;
/* hash index of string to be inserted */
140
uInt
hash_size
;
/* number of elements in hash table */
141
uInt
hash_bits
;
/* log2(hash_size) */
142
uInt
hash_mask
;
/* hash_size-1 */
143
144
uInt
hash_shift
;
145
/* Number of bits by which ins_h must be shifted at each input
146
* step. It must be such that after MIN_MATCH steps, the oldest
147
* byte no longer takes part in the hash key, that is:
148
* hash_shift * MIN_MATCH >= hash_bits
149
*/
150
151
long
block_start
;
152
/* Window position at the beginning of the current output block. Gets
153
* negative when the window is moved backwards.
154
*/
155
156
uInt
match_length
;
/* length of best match */
157
IPos
prev_match
;
/* previous match */
158
int
match_available
;
/* set if previous match exists */
159
uInt
strstart
;
/* start of string to insert */
160
uInt
match_start
;
/* start of matching string */
161
uInt
lookahead
;
/* number of valid bytes ahead in window */
162
163
uInt
prev_length
;
164
/* Length of the best match at previous step. Matches not greater than this
165
* are discarded. This is used in the lazy match evaluation.
166
*/
167
168
uInt
max_chain_length
;
169
/* To speed up deflation, hash chains are never searched beyond this
170
* length. A higher limit improves compression ratio but degrades the
171
* speed.
172
*/
173
174
uInt
max_lazy_match
;
175
/* Attempt to find a better match only when the current match is strictly
176
* smaller than this value. This mechanism is used only for compression
177
* levels >= 4.
178
*/
179
# define max_insert_length max_lazy_match
180
/* Insert new strings in the hash table only if the match length is not
181
* greater than this length. This saves time but degrades compression.
182
* max_insert_length is used only for compression levels <= 3.
183
*/
184
185
int
level
;
/* compression level (1..9) */
186
int
strategy
;
/* favor or force Huffman coding*/
187
188
uInt
good_match
;
189
/* Use a faster search when the previous match is longer than this */
190
191
int
nice_match
;
/* Stop searching when current match exceeds this */
192
193
/* used by trees.c: */
194
/* Didn't use ct_data typedef below to suppress compiler warning */
195
struct
ct_data_s dyn_ltree[
HEAP_SIZE
];
/* literal and length tree */
196
struct
ct_data_s dyn_dtree[2*
D_CODES
+1];
/* distance tree */
197
struct
ct_data_s bl_tree[2*
BL_CODES
+1];
/* Huffman tree for bit lengths */
198
199
struct
tree_desc_s l_desc;
/* desc. for literal tree */
200
struct
tree_desc_s d_desc;
/* desc. for distance tree */
201
struct
tree_desc_s bl_desc;
/* desc. for bit length tree */
202
203
ush
bl_count[
MAX_BITS
+1];
204
/* number of codes at each bit length for an optimal tree */
205
206
int
heap[2*
L_CODES
+1];
/* heap used to build the Huffman trees */
207
int
heap_len
;
/* number of elements in the heap */
208
int
heap_max
;
/* element of largest frequency */
209
/* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
210
* The same heap array is used to build all trees.
211
*/
212
213
uch
depth[2*
L_CODES
+1];
214
/* Depth of each subtree used as tie breaker for trees of equal frequency
215
*/
216
217
uchf
*
l_buf
;
/* buffer for literals or lengths */
218
219
uInt
lit_bufsize
;
220
/* Size of match buffer for literals/lengths. There are 4 reasons for
221
* limiting lit_bufsize to 64K:
222
* - frequencies can be kept in 16 bit counters
223
* - if compression is not successful for the first block, all input
224
* data is still in the window so we can still emit a stored block even
225
* when input comes from standard input. (This can also be done for
226
* all blocks if lit_bufsize is not greater than 32K.)
227
* - if compression is not successful for a file smaller than 64K, we can
228
* even emit a stored file instead of a stored block (saving 5 bytes).
229
* This is applicable only for zip (not gzip or zlib).
230
* - creating new Huffman trees less frequently may not provide fast
231
* adaptation to changes in the input data statistics. (Take for
232
* example a binary file with poorly compressible code followed by
233
* a highly compressible string table.) Smaller buffer sizes give
234
* fast adaptation but have of course the overhead of transmitting
235
* trees more frequently.
236
* - I can't count above 4
237
*/
238
239
uInt
last_lit
;
/* running index in l_buf */
240
241
ushf
*
d_buf
;
242
/* Buffer for distances. To simplify the code, d_buf and l_buf have
243
* the same number of elements. To use different lengths, an extra flag
244
* array would be necessary.
245
*/
246
247
ulg
opt_len
;
/* bit length of current block with optimal trees */
248
ulg
static_len
;
/* bit length of current block with static trees */
249
uInt
matches
;
/* number of string matches in current block */
250
uInt
insert
;
/* bytes at end of window left to insert */
251
252
#ifdef DEBUG
253
ulg
compressed_len;
/* total bit length of compressed file mod 2^32 */
254
ulg
bits_sent;
/* bit length of compressed data sent mod 2^32 */
255
#endif
256
257
ush
bi_buf
;
258
/* Output buffer. bits are inserted starting at the bottom (least
259
* significant bits).
260
*/
261
int
bi_valid
;
262
/* Number of valid bits in bi_buf. All bits above the last valid bit
263
* are always zero.
264
*/
265
266
ulg
high_water
;
267
/* High water mark offset in window for initialized bytes -- bytes above
268
* this are set to zero in order to avoid memory check warnings when
269
* longest match routines access bytes past the input. This is then
270
* updated to the new high water mark.
271
*/
272
273
}
FAR
deflate_state
;
274
275
/* Output a byte on the stream.
276
* IN assertion: there is enough room in pending_buf.
277
*/
278
#define put_byte(s, c) {s->pending_buf[s->pending++] = (c);}
279
280
281
#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
282
/* Minimum amount of lookahead, except at the end of the input file.
283
* See deflate.c for comments about the MIN_MATCH+1.
284
*/
285
286
#define MAX_DIST(s) ((s)->w_size-MIN_LOOKAHEAD)
287
/* In order to simplify the code, particularly on 16 bit machines, match
288
* distances are limited to MAX_DIST instead of WSIZE.
289
*/
290
291
#define WIN_INIT MAX_MATCH
292
/* Number of bytes after end of data in window to initialize in order to avoid
293
memory checker errors from longest match routines */
294
295
/* in trees.c */
296
void
ZLIB_INTERNAL
_tr_init
OF
((
deflate_state
*s));
297
int
ZLIB_INTERNAL
_tr_tally
OF
((
deflate_state
*s,
unsigned
dist,
unsigned
lc));
298
void
ZLIB_INTERNAL
_tr_flush_block
OF
((
deflate_state
*s,
charf
*buf,
299
ulg
stored_len,
int
last));
300
void
ZLIB_INTERNAL
_tr_flush_bits
OF
((
deflate_state
*s));
301
void
ZLIB_INTERNAL
_tr_align
OF
((
deflate_state
*s));
302
void
ZLIB_INTERNAL
_tr_stored_block
OF
((
deflate_state
*s,
charf
*buf,
303
ulg
stored_len,
int
last));
304
305
#define d_code(dist) \
306
((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)])
307
/* Mapping from a distance to a distance code. dist is the distance - 1 and
308
* must not have side effects. _dist_code[256] and _dist_code[257] are never
309
* used.
310
*/
311
312
#ifndef DEBUG
313
/* Inline versions of _tr_tally for speed: */
314
315
#if defined(GEN_TREES_H) || !defined(STDC)
316
extern
uch
ZLIB_INTERNAL
_length_code
[];
317
extern
uch
ZLIB_INTERNAL
_dist_code
[];
318
#else
319
extern
const
uch
ZLIB_INTERNAL
_length_code[];
320
extern
const
uch
ZLIB_INTERNAL
_dist_code[];
321
#endif
322
323
# define _tr_tally_lit(s, c, flush) \
324
{ uch cc = (c); \
325
s->d_buf[s->last_lit] = 0; \
326
s->l_buf[s->last_lit++] = cc; \
327
s->dyn_ltree[cc].Freq++; \
328
flush = (s->last_lit == s->lit_bufsize-1); \
329
}
330
# define _tr_tally_dist(s, distance, length, flush) \
331
{ uch len = (length); \
332
ush dist = (distance); \
333
s->d_buf[s->last_lit] = dist; \
334
s->l_buf[s->last_lit++] = len; \
335
dist--; \
336
s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \
337
s->dyn_dtree[d_code(dist)].Freq++; \
338
flush = (s->last_lit == s->lit_bufsize-1); \
339
}
340
#else
341
# define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c)
342
# define _tr_tally_dist(s, distance, length, flush) \
343
flush = _tr_tally(s, distance, length)
344
#endif
345
346
#endif
/* DEFLATE_H */
OF
#define OF(args)
Definition:
zconf.h:269
deflate_state::gzindex
uInt gzindex
Definition:
deflate.h:106
internal_state
Definition:
zlib.h:1742
deflate_state::heap_len
int heap_len
Definition:
deflate.h:207
deflate_state::match_start
uInt match_start
Definition:
deflate.h:160
deflate_state::block_start
long block_start
Definition:
deflate.h:151
_tr_flush_block
void _tr_flush_block()
_tr_flush_bits
void _tr_flush_bits()
BL_CODES
#define BL_CODES
Definition:
deflate.h:42
deflate_state::bi_valid
int bi_valid
Definition:
deflate.h:261
Byte
unsigned char Byte
Definition:
zconf.h:368
charf
char charf
Definition:
zconf.h:379
tree_desc::max_code
int max_code
Definition:
deflate.h:85
deflate_state::heap_max
int heap_max
Definition:
deflate.h:208
deflate_state::w_bits
uInt w_bits
Definition:
deflate.h:113
deflate_state::gzhead
gz_headerp gzhead
Definition:
deflate.h:105
tree_desc::stat_desc
static_tree_desc * stat_desc
Definition:
deflate.h:86
deflate_state::pending_buf
Bytef * pending_buf
Definition:
deflate.h:100
deflate_state::w_mask
uInt w_mask
Definition:
deflate.h:114
MAX_BITS
#define MAX_BITS
Definition:
deflate.h:48
Pos
ush Pos
Definition:
deflate.h:89
uchf
uch uchf
Definition:
zutil.h:42
deflate_state::method
Byte method
Definition:
deflate.h:107
deflate_state::prev
Posf * prev
Definition:
deflate.h:131
deflate_state::window_size
ulg window_size
Definition:
deflate.h:126
deflate_state::ins_h
uInt ins_h
Definition:
deflate.h:139
_tr_stored_block
void _tr_stored_block()
tree_desc
Definition:
deflate.h:83
_tr_tally
int _tr_tally()
ZLIB_INTERNAL
#define ZLIB_INTERNAL
Definition:
compress.c:8
deflate_state
Definition:
deflate.h:97
deflate_state::prev_match
IPos prev_match
Definition:
deflate.h:157
code
static int * code
Definition:
enough.c:174
deflate_state::level
int level
Definition:
deflate.h:185
deflate_state::match_available
int match_available
Definition:
deflate.h:158
deflate_state::hash_bits
uInt hash_bits
Definition:
deflate.h:141
deflate_state::lookahead
uInt lookahead
Definition:
deflate.h:161
deflate_state::max_chain_length
uInt max_chain_length
Definition:
deflate.h:168
deflate_state::lit_bufsize
uInt lit_bufsize
Definition:
deflate.h:219
deflate_state::strm
z_streamp strm
Definition:
deflate.h:98
_dist_code
uch _dist_code[]
Definition:
trees.c:98
ushf
ush ushf
Definition:
zutil.h:44
tree_desc::dyn_tree
ct_data * dyn_tree
Definition:
deflate.h:84
deflate_state::static_len
ulg static_len
Definition:
deflate.h:248
deflate_state::good_match
uInt good_match
Definition:
deflate.h:188
deflate_state::hash_size
uInt hash_size
Definition:
deflate.h:140
gz_header
Definition:
zlib.h:112
ush
unsigned short ush
Definition:
zutil.h:43
deflate_state::last_flush
int last_flush
Definition:
deflate.h:108
z_stream
Definition:
zlib.h:85
deflate_state::window
Bytef * window
Definition:
deflate.h:116
deflate_state::last_lit
uInt last_lit
Definition:
deflate.h:239
deflate_state::insert
uInt insert
Definition:
deflate.h:250
deflate_state::strategy
int strategy
Definition:
deflate.h:186
HEAP_SIZE
#define HEAP_SIZE
Definition:
deflate.h:45
deflate_state::bi_buf
ush bi_buf
Definition:
deflate.h:257
deflate_state::max_lazy_match
uInt max_lazy_match
Definition:
deflate.h:174
deflate_state::head
Posf * head
Definition:
deflate.h:137
deflate_state::l_buf
uchf * l_buf
Definition:
deflate.h:217
_length_code
uch _length_code[]
Definition:
trees.c:104
deflate_state::pending_buf_size
ulg pending_buf_size
Definition:
deflate.h:101
deflate_state::high_water
ulg high_water
Definition:
deflate.h:266
deflate_state::wrap
int wrap
Definition:
deflate.h:104
static_tree_desc_s
Definition:
deflate.c:155
Bytef
Byte Bytef
Definition:
zconf.h:377
deflate_state::match_length
uInt match_length
Definition:
deflate.h:156
Posf
Pos Posf
Definition:
deflate.h:90
deflate_state::d_buf
ushf * d_buf
Definition:
deflate.h:241
uch
unsigned char uch
Definition:
zutil.h:41
deflate_state::opt_len
ulg opt_len
Definition:
deflate.h:247
ulg
unsigned long ulg
Definition:
zutil.h:45
_tr_init
void _tr_init()
deflate_state::pending
uInt pending
Definition:
deflate.h:103
deflate_state::hash_mask
uInt hash_mask
Definition:
deflate.h:142
deflate_state::prev_length
uInt prev_length
Definition:
deflate.h:163
deflate_state::pending_out
Bytef * pending_out
Definition:
deflate.h:102
zutil.h
deflate_state::nice_match
int nice_match
Definition:
deflate.h:191
FAR
#define FAR
Definition:
zconf.h:364
D_CODES
#define D_CODES
Definition:
deflate.h:39
_tr_align
void _tr_align()
deflate_state::hash_shift
uInt hash_shift
Definition:
deflate.h:144
deflate_state::status
int status
Definition:
deflate.h:99
uInt
unsigned int uInt
Definition:
zconf.h:370
ct_data
Definition:
deflate.h:65
deflate_state::matches
uInt matches
Definition:
deflate.h:249
deflate_state::strstart
uInt strstart
Definition:
deflate.h:159
IPos
unsigned IPos
Definition:
deflate.h:91
L_CODES
#define L_CODES
Definition:
deflate.h:36
deflate_state::w_size
uInt w_size
Definition:
deflate.h:112
bial
zlib
deflate.h
Generated by
1.8.11