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
trees.cc
Go to the documentation of this file.
1/* trees.c -- output deflated data using Huffman coding
2 * Copyright (C) 1995-2003 Jean-loup Gailly
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */
5
6/*
7 * ALGORITHM
8 *
9 * The "deflation" process uses several Huffman trees. The more
10 * common source values are represented by shorter bit sequences.
11 *
12 * Each code tree is stored in a compressed form which is itself
13 * a Huffman encoding of the lengths of all the code strings (in
14 * ascending order by source values). The actual code strings are
15 * reconstructed from the lengths in the inflate process, as described
16 * in the deflate specification.
17 *
18 * REFERENCES
19 *
20 * Deutsch, L.P.,"'Deflate' Compressed Data Format Specification".
21 * Available in ftp.uu.net:/pub/archiving/zip/doc/deflate-1.1.doc
22 *
23 * Storer, James A.
24 * Data Compression: Methods and Theory, pp. 49-50.
25 * Computer Science Press, 1988. ISBN 0-7167-8156-5.
26 *
27 * Sedgewick, R.
28 * Algorithms, p290.
29 * Addison-Wesley, 1983. ISBN 0-201-06672-6.
30 */
31
32/* @(#) $Id: trees.cc,v 1.1 2005-05-12 21:04:53 duns Exp $ */
33
34/* #define GEN_TREES_H */
35
36#include "deflate.h"
37
38#ifdef DEBUG
39# include <ctype.h>
40#endif
41
42/* ===========================================================================
43 * Constants
44 */
45
46#define MAX_BL_BITS 7
47/* Bit length codes must not exceed MAX_BL_BITS bits */
48
49#define END_BLOCK 256
50/* end of block literal code */
51
52#define REP_3_6 16
53/* repeat previous bit length 3-6 times (2 bits of repeat count) */
54
55#define REPZ_3_10 17
56/* repeat a zero length 3-10 times (3 bits of repeat count) */
57
58#define REPZ_11_138 18
59/* repeat a zero length 11-138 times (7 bits of repeat count) */
60
61local const int extra_lbits[LENGTH_CODES] /* extra bits for each length code */
62 = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0};
63
64local const int extra_dbits[D_CODES] /* extra bits for each distance code */
65 = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13};
66
67local const int extra_blbits[BL_CODES]/* extra bits for each bit length code */
68 = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7};
69
71 = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15};
72/* The lengths of the bit length codes are sent in order of decreasing
73 * probability, to avoid transmitting the lengths for unused bit length codes.
74 */
75
76#define Buf_size (8 * 2*sizeof(char))
77/* Number of bits used within bi_buf. (bi_buf might be implemented on
78 * more than 16 bits on some systems.)
79 */
80
81/* ===========================================================================
82 * Local data. These are initialized only once.
83 */
84
85#define DIST_CODE_LEN 512 /* see definition of array dist_code below */
86
87#if defined(GEN_TREES_H) || !defined(STDC)
88/* non ANSI compilers may not accept trees.h */
89
91/* The static literal tree. Since the bit lengths are imposed, there is no
92 * need for the L_CODES extra codes used during heap construction. However
93 * The codes 286 and 287 are needed to build a canonical tree (see _tr_init
94 * below).
95 */
96
98/* The static distance tree. (Actually a trivial tree since all codes use
99 * 5 bits.)
100 */
101
103/* Distance codes. The first 256 values correspond to the distances
104 * 3 .. 258, the last 256 values correspond to the top 8 bits of
105 * the 15 bit distances.
106 */
107
109/* length code for each normalized match length (0 == MIN_MATCH) */
110
112/* First normalized length for each code (0 = MIN_MATCH) */
113
115/* First normalized distance for each code (0 = distance of 1) */
116
117#else
118# include "trees.h"
119#endif /* GEN_TREES_H */
120
121struct static_tree_desc_s {
122 const ct_data *static_tree; /* static tree or NULL */
123 const intf *extra_bits; /* extra bits for each code or NULL */
124 int extra_base; /* base index for extra_bits */
125 int elems; /* max number of elements in the tree */
126 int max_length; /* max bit length for the codes */
127};
128
131
134
136{(const ct_data *)0, extra_blbits, 0, BL_CODES, MAX_BL_BITS};
137
138/* ===========================================================================
139 * Local (static) routines in this file.
140 */
141
144local void pqdownheap OF((deflate_state *s, ct_data *tree, int k));
146local void gen_codes OF((ct_data *tree, int max_code, ushf *bl_count));
147local void build_tree OF((deflate_state *s, tree_desc *desc));
148local void scan_tree OF((deflate_state *s, ct_data *tree, int max_code));
149local void send_tree OF((deflate_state *s, ct_data *tree, int max_code));
151local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes,
152 int blcodes));
154 ct_data *dtree));
156local unsigned bi_reverse OF((unsigned value, int length));
158local void bi_flush OF((deflate_state *s));
159local void copy_block OF((deflate_state *s, charf *buf, unsigned len,
160 int header));
161
162#ifdef GEN_TREES_H
163local void gen_trees_header OF((void));
164#endif
165
166#ifndef DEBUG
167# define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len)
168 /* Send a code of the given tree. c and tree must not have side effects */
169
170#else /* DEBUG */
171# define send_code(s, c, tree) \
172 { if (z_verbose>2) fprintf(stderr,(char*)"\ncd %3d ",(c)); \
173 send_bits(s, tree[c].Code, tree[c].Len); }
174#endif
175
176/* ===========================================================================
177 * Output a short LSB first on the stream.
178 * IN assertion: there is enough room in pendingBuf.
179 */
180#define put_short(s, w) { \
181 put_byte(s, (uch)((w) & 0xff)); \
182 put_byte(s, (uch)((ush)(w) >> 8)); \
183}
184
185/* ===========================================================================
186 * Send a value on a given number of bits.
187 * IN assertion: length <= 16 and value fits in length bits.
188 */
189#ifdef DEBUG
190local void send_bits OF((deflate_state *s, int value, int length));
191
192local void send_bits(deflate_state *s, int value, int length)
193{
194 Tracevv((stderr,(char*)" l %2d v %4x ", length, value));
195 Assert(length > 0 && length <= 15, (char*)"invalid length");
196 s->bits_sent += (ulg)length;
197
198 /* If not enough room in bi_buf, use (valid) bits from bi_buf and
199 * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid))
200 * unused bits in value.
201 */
202 if (s->bi_valid > (int)Buf_size - length) {
203 s->bi_buf |= (value << s->bi_valid);
204 put_short(s, s->bi_buf);
205 s->bi_buf = (ush)value >> (Buf_size - s->bi_valid);
206 s->bi_valid += length - Buf_size;
207 } else {
208 s->bi_buf |= value << s->bi_valid;
209 s->bi_valid += length;
210 }
211}
212#else /* !DEBUG */
213
214#define send_bits(s, value, length) \
215{ int len = length;\
216 if (s->bi_valid > (int)Buf_size - len) {\
217 int val = value;\
218 s->bi_buf |= (val << s->bi_valid);\
219 put_short(s, s->bi_buf);\
220 s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\
221 s->bi_valid += len - Buf_size;\
222 } else {\
223 s->bi_buf |= (value) << s->bi_valid;\
224 s->bi_valid += len;\
225 }\
226}
227#endif /* DEBUG */
228
229
230/* the arguments must not have side effects */
231
232/* ===========================================================================
233 * Initialize the various 'constant' tables.
234 */
236{
237#if defined(GEN_TREES_H) || !defined(STDC)
238 static int static_init_done = 0;
239 int n; /* iterates over tree elements */
240 int bits; /* bit counter */
241 int length; /* length value */
242 int code; /* code value */
243 int dist; /* distance index */
244 ush bl_count[MAX_BITS+1];
245 /* number of codes at each bit length for an optimal tree */
246
247 if (static_init_done) return;
248
249 /* For some embedded targets, global variables are not initialized: */
255
256 /* Initialize the mapping length (0..255) -> length code (0..28) */
257 length = 0;
258 for (code = 0; code < LENGTH_CODES-1; code++) {
259 base_length[code] = length;
260 for (n = 0; n < (1<<extra_lbits[code]); n++) {
261 _length_code[length++] = (uch)code;
262 }
263 }
264 Assert (length == 256, (char*)"tr_static_init: length != 256");
265 /* Note that the length 255 (match length 258) can be represented
266 * in two different ways: code 284 + 5 bits or code 285, so we
267 * overwrite length_code[255] to use the best encoding:
268 */
269 _length_code[length-1] = (uch)code;
270
271 /* Initialize the mapping dist (0..32K) -> dist code (0..29) */
272 dist = 0;
273 for (code = 0 ; code < 16; code++) {
274 base_dist[code] = dist;
275 for (n = 0; n < (1<<extra_dbits[code]); n++) {
276 _dist_code[dist++] = (uch)code;
277 }
278 }
279 Assert (dist == 256, (char*)"tr_static_init: dist != 256");
280 dist >>= 7; /* from now on, all distances are divided by 128 */
281 for ( ; code < D_CODES; code++) {
282 base_dist[code] = dist << 7;
283 for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) {
284 _dist_code[256 + dist++] = (uch)code;
285 }
286 }
287 Assert (dist == 256, (char*)"tr_static_init: 256+dist != 512");
288
289 /* Construct the codes of the static literal tree */
290 for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0;
291 n = 0;
292 while (n <= 143) static_ltree[n++].Len = 8, bl_count[8]++;
293 while (n <= 255) static_ltree[n++].Len = 9, bl_count[9]++;
294 while (n <= 279) static_ltree[n++].Len = 7, bl_count[7]++;
295 while (n <= 287) static_ltree[n++].Len = 8, bl_count[8]++;
296 /* Codes 286 and 287 do not exist, but we must include them in the
297 * tree construction to get a canonical Huffman tree (longest code
298 * all ones)
299 */
300 gen_codes((ct_data *)static_ltree, L_CODES+1, bl_count);
301
302 /* The static distance tree is trivial: */
303 for (n = 0; n < D_CODES; n++) {
304 static_dtree[n].Len = 5;
305 static_dtree[n].Code = bi_reverse((unsigned)n, 5);
306 }
307 static_init_done = 1;
308
309# ifdef GEN_TREES_H
310 gen_trees_header();
311# endif
312#endif /* defined(GEN_TREES_H) || !defined(STDC) */
313}
314
315/* ===========================================================================
316 * Genererate the file trees.h describing the static trees.
317 */
318#ifdef GEN_TREES_H
319# ifndef DEBUG
320# include <stdio.h>
321# endif
322
323# define SEPARATOR(i, last, width) \
324 ((i) == (last)? (char*)"\n};\n\n" : \
325 ((i) % (width) == (width)-1 ? (char*)",\n" : ", "))
326
327void gen_trees_header()
328{
329 FILE *header = fopen((char*)"trees.h", (char*)"w");
330 int i;
331
332 Assert (header != NULL, (char*)"Can't open trees.h");
333 fprintf(header,
334 (char*)"/* header created automatically with -DGEN_TREES_H */\n\n");
335
336 fprintf(header, (char*)"local const ct_data static_ltree[L_CODES+2] = {\n");
337 for (i = 0; i < L_CODES+2; i++) {
338 fprintf(header, (char*)"{{%3u},{%3u}}%s", static_ltree[i].Code,
339 static_ltree[i].Len, SEPARATOR(i, L_CODES+1, 5));
340 }
341
342 fprintf(header, (char*)"local const ct_data static_dtree[D_CODES] = {\n");
343 for (i = 0; i < D_CODES; i++) {
344 fprintf(header, (char*)"{{%2u},{%2u}}%s", static_dtree[i].Code,
345 static_dtree[i].Len, SEPARATOR(i, D_CODES-1, 5));
346 }
347
348 fprintf(header, (char*)"const uch _dist_code[DIST_CODE_LEN] = {\n");
349 for (i = 0; i < DIST_CODE_LEN; i++) {
350 fprintf(header, (char*)"%2u%s", _dist_code[i],
351 SEPARATOR(i, DIST_CODE_LEN-1, 20));
352 }
353
354 fprintf(header, (char*)"const uch _length_code[MAX_MATCH-MIN_MATCH+1]= {\n");
355 for (i = 0; i < MAX_MATCH-MIN_MATCH+1; i++) {
356 fprintf(header, (char*)"%2u%s", _length_code[i],
357 SEPARATOR(i, MAX_MATCH-MIN_MATCH, 20));
358 }
359
360 fprintf(header, (char*)"local const int base_length[LENGTH_CODES] = {\n");
361 for (i = 0; i < LENGTH_CODES; i++) {
362 fprintf(header, (char*)"%1u%s", base_length[i],
363 SEPARATOR(i, LENGTH_CODES-1, 20));
364 }
365
366 fprintf(header, (char*)"local const int base_dist[D_CODES] = {\n");
367 for (i = 0; i < D_CODES; i++) {
368 fprintf(header, (char*)"%5u%s", base_dist[i],
369 SEPARATOR(i, D_CODES-1, 10));
370 }
371
372 fclose(header);
373}
374#endif /* GEN_TREES_H */
375
376/* ===========================================================================
377 * Initialize the tree data structures for a new zlib stream.
378 */
380{
382
383 s->l_desc.dyn_tree = s->dyn_ltree;
385
386 s->d_desc.dyn_tree = s->dyn_dtree;
388
389 s->bl_desc.dyn_tree = s->bl_tree;
391
392 s->bi_buf = 0;
393 s->bi_valid = 0;
394 s->last_eob_len = 8; /* enough lookahead for inflate */
395#ifdef DEBUG
396 s->compressed_len = 0L;
397 s->bits_sent = 0L;
398#endif
399
400 /* Initialize the first block of the first file: */
401 init_block(s);
402}
403
404/* ===========================================================================
405 * Initialize a new block.
406 */
408{
409 int n; /* iterates over tree elements */
410
411 /* Initialize the trees. */
412 for (n = 0; n < L_CODES; n++) s->dyn_ltree[n].Freq = 0;
413 for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0;
414 for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0;
415
416 s->dyn_ltree[END_BLOCK].Freq = 1;
417 s->opt_len = s->static_len = 0L;
418 s->last_lit = s->matches = 0;
419}
420
421#define SMALLEST 1
422/* Index within the heap array of least frequent node in the Huffman tree */
423
424
425/* ===========================================================================
426 * Remove the smallest element from the heap and recreate the heap with
427 * one less element. Updates heap and heap_len.
428 */
429#define pqremove(s, tree, top) \
430{\
431 top = s->heap[SMALLEST]; \
432 s->heap[SMALLEST] = s->heap[s->heap_len--]; \
433 pqdownheap(s, tree, SMALLEST); \
434}
435
436/* ===========================================================================
437 * Compares to subtrees, using the tree depth as tie breaker when
438 * the subtrees have equal frequency. This minimizes the worst case length.
439 */
440#define smaller(tree, n, m, depth) \
441 (tree[n].Freq < tree[m].Freq || \
442 (tree[n].Freq == tree[m].Freq && depth[n] <= depth[m]))
443
444/* ===========================================================================
445 * Restore the heap property by moving down the tree starting at node k,
446 * exchanging a node with the smallest of its two sons if necessary, stopping
447 * when the heap property is re-established (each father smaller than its
448 * two sons).
449 */
450local void pqdownheap(deflate_state *s, ct_data *tree, int k)
451{
452 int v = s->heap[k];
453 int j = k << 1; /* left son of k */
454 while (j <= s->heap_len) {
455 /* Set j to the smallest of the two sons: */
456 if (j < s->heap_len &&
457 smaller(tree, s->heap[j+1], s->heap[j], s->depth)) {
458 j++;
459 }
460 /* Exit if v is smaller than both sons */
461 if (smaller(tree, v, s->heap[j], s->depth)) break;
462
463 /* Exchange v with the smallest son */
464 s->heap[k] = s->heap[j]; k = j;
465
466 /* And continue down the tree, setting j to the left son of k */
467 j <<= 1;
468 }
469 s->heap[k] = v;
470}
471
472/* ===========================================================================
473 * Compute the optimal bit lengths for a tree and update the total bit length
474 * for the current block.
475 * IN assertion: the fields freq and dad are set, heap[heap_max] and
476 * above are the tree nodes sorted by increasing frequency.
477 * OUT assertions: the field len is set to the optimal bit length, the
478 * array bl_count contains the frequencies for each bit length.
479 * The length opt_len is updated; static_len is also updated if stree is
480 * not null.
481 */
483{
484 ct_data *tree = desc->dyn_tree;
485 int max_code = desc->max_code;
486 const ct_data *stree = desc->stat_desc->static_tree;
487 const intf *extra = desc->stat_desc->extra_bits;
488 int base = desc->stat_desc->extra_base;
489 int max_length = desc->stat_desc->max_length;
490 int h; /* heap index */
491 int n, m; /* iterate over the tree elements */
492 int bits; /* bit length */
493 int xbits; /* extra bits */
494 ush f; /* frequency */
495 int overflow = 0; /* number of elements with bit length too large */
496
497 for (bits = 0; bits <= MAX_BITS; bits++) s->bl_count[bits] = 0;
498
499 /* In a first pass, compute the optimal bit lengths (which may
500 * overflow in the case of the bit length tree).
501 */
502 tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */
503
504 for (h = s->heap_max+1; h < HEAP_SIZE; h++) {
505 n = s->heap[h];
506 bits = tree[tree[n].Dad].Len + 1;
507 if (bits > max_length) bits = max_length, overflow++;
508 tree[n].Len = (ush)bits;
509 /* We overwrite tree[n].Dad which is no longer needed */
510
511 if (n > max_code) continue; /* not a leaf node */
512
513 s->bl_count[bits]++;
514 xbits = 0;
515 if (n >= base) xbits = extra[n-base];
516 f = tree[n].Freq;
517 s->opt_len += (ulg)f * (bits + xbits);
518 if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits);
519 }
520 if (overflow == 0) return;
521
522 Trace((stderr,(char*)"\nbit length overflow\n"));
523 /* This happens for example on obj2 and pic of the Calgary corpus */
524
525 /* Find the first bit length which could increase: */
526 do {
527 bits = max_length-1;
528 while (s->bl_count[bits] == 0) bits--;
529 s->bl_count[bits]--; /* move one leaf down the tree */
530 s->bl_count[bits+1] += 2; /* move one overflow item as its brother */
531 s->bl_count[max_length]--;
532 /* The brother of the overflow item also moves one step up,
533 * but this does not affect bl_count[max_length]
534 */
535 overflow -= 2;
536 } while (overflow > 0);
537
538 /* Now recompute all bit lengths, scanning in increasing frequency.
539 * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
540 * lengths instead of fixing only the wrong ones. This idea is taken
541 * from 'ar' written by Haruhiko Okumura.)
542 */
543 for (bits = max_length; bits != 0; bits--) {
544 n = s->bl_count[bits];
545 while (n != 0) {
546 m = s->heap[--h];
547 if (m > max_code) continue;
548 if (tree[m].Len != (unsigned) bits) {
549 Trace((stderr,(char*)"code %d bits %d->%d\n", m, tree[m].Len, bits));
550 s->opt_len += ((long)bits - (long)tree[m].Len)
551 *(long)tree[m].Freq;
552 tree[m].Len = (ush)bits;
553 }
554 n--;
555 }
556 }
557}
558
559/* ===========================================================================
560 * Generate the codes for a given tree and bit counts (which need not be
561 * optimal).
562 * IN assertion: the array bl_count contains the bit length statistics for
563 * the given tree and the field len is set for all tree elements.
564 * OUT assertion: the field code is set for all tree elements of non
565 * zero code length.
566 */
567local void gen_codes (ct_data *tree, int max_code, ushf *bl_count)
568{
569 ush next_code[MAX_BITS+1]; /* next code value for each bit length */
570 ush code = 0; /* running code value */
571 int bits; /* bit index */
572 int n; /* code index */
573
574 /* The distribution counts are first used to generate the code values
575 * without bit reversal.
576 */
577 for (bits = 1; bits <= MAX_BITS; bits++) {
578 next_code[bits] = code = (code + bl_count[bits-1]) << 1;
579 }
580 /* Check that the bit counts in bl_count are consistent. The last code
581 * must be all ones.
582 */
583 Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
584 (char*)"inconsistent bit counts");
585 Tracev((stderr,(char*)"\ngen_codes: max_code %d ", max_code));
586
587 for (n = 0; n <= max_code; n++) {
588 int len = tree[n].Len;
589 if (len == 0) continue;
590 /* Now reverse the bits */
591 tree[n].Code = bi_reverse(next_code[len]++, len);
592
593 Tracecv(tree != static_ltree, (stderr,(char*)"\nn %3d %c l %2d c %4x (%x) ",
594 n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
595 }
596}
597
598/* ===========================================================================
599 * Construct one Huffman tree and assigns the code bit strings and lengths.
600 * Update the total bit length for the current block.
601 * IN assertion: the field freq is set for all tree elements.
602 * OUT assertions: the fields len and code are set to the optimal bit length
603 * and corresponding code. The length opt_len is updated; static_len is
604 * also updated if stree is not null. The field max_code is set.
605 */
607{
608 ct_data *tree = desc->dyn_tree;
609 const ct_data *stree = desc->stat_desc->static_tree;
610 int elems = desc->stat_desc->elems;
611 int n, m; /* iterate over heap elements */
612 int max_code = -1; /* largest code with non zero frequency */
613 int node; /* new node being created */
614
615 /* Construct the initial heap, with least frequent element in
616 * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
617 * heap[0] is not used.
618 */
619 s->heap_len = 0, s->heap_max = HEAP_SIZE;
620
621 for (n = 0; n < elems; n++) {
622 if (tree[n].Freq != 0) {
623 s->heap[++(s->heap_len)] = max_code = n;
624 s->depth[n] = 0;
625 } else {
626 tree[n].Len = 0;
627 }
628 }
629
630 /* The pkzip format requires that at least one distance code exists,
631 * and that at least one bit should be sent even if there is only one
632 * possible code. So to avoid special checks later on we force at least
633 * two codes of non zero frequency.
634 */
635 while (s->heap_len < 2) {
636 node = s->heap[++(s->heap_len)] = (max_code < 2 ? ++max_code : 0);
637 tree[node].Freq = 1;
638 s->depth[node] = 0;
639 s->opt_len--; if (stree) s->static_len -= stree[node].Len;
640 /* node is 0 or 1 so it does not have extra bits */
641 }
642 desc->max_code = max_code;
643
644 /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
645 * establish sub-heaps of increasing lengths:
646 */
647 for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n);
648
649 /* Construct the Huffman tree by repeatedly combining the least two
650 * frequent nodes.
651 */
652 node = elems; /* next internal node of the tree */
653 do {
654 pqremove(s, tree, n); /* n = node of least frequency */
655 m = s->heap[SMALLEST]; /* m = node of next least frequency */
656
657 s->heap[--(s->heap_max)] = n; /* keep the nodes sorted by frequency */
658 s->heap[--(s->heap_max)] = m;
659
660 /* Create a new node father of n and m */
661 tree[node].Freq = tree[n].Freq + tree[m].Freq;
662 s->depth[node] = (uch)((s->depth[n] >= s->depth[m] ?
663 s->depth[n] : s->depth[m]) + 1);
664 tree[n].Dad = tree[m].Dad = (ush)node;
665#ifdef DUMP_BL_TREE
666 if (tree == s->bl_tree) {
667 fprintf(stderr,(char*)"\nnode %d(%d), sons %d(%d) %d(%d)",
668 node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq);
669 }
670#endif
671 /* and insert the new node in the heap */
672 s->heap[SMALLEST] = node++;
673 pqdownheap(s, tree, SMALLEST);
674
675 } while (s->heap_len >= 2);
676
677 s->heap[--(s->heap_max)] = s->heap[SMALLEST];
678
679 /* At this point, the fields freq and dad are set. We can now
680 * generate the bit lengths.
681 */
682 gen_bitlen(s, (tree_desc *)desc);
683
684 /* The field len is now set, we can generate the bit codes */
685 gen_codes ((ct_data *)tree, max_code, s->bl_count);
686}
687
688/* ===========================================================================
689 * Scan a literal or distance tree to determine the frequencies of the codes
690 * in the bit length tree.
691 */
692local void scan_tree (deflate_state *s, ct_data *tree, int max_code)
693{
694 int n; /* iterates over all tree elements */
695 int prevlen = -1; /* last emitted length */
696 int curlen; /* length of current code */
697 int nextlen = tree[0].Len; /* length of next code */
698 int count = 0; /* repeat count of the current code */
699 int max_count = 7; /* max repeat count */
700 int min_count = 4; /* min repeat count */
701
702 if (nextlen == 0) max_count = 138, min_count = 3;
703 tree[max_code+1].Len = (ush)0xffff; /* guard */
704
705 for (n = 0; n <= max_code; n++) {
706 curlen = nextlen; nextlen = tree[n+1].Len;
707 if (++count < max_count && curlen == nextlen) {
708 continue;
709 } else if (count < min_count) {
710 s->bl_tree[curlen].Freq += count;
711 } else if (curlen != 0) {
712 if (curlen != prevlen) s->bl_tree[curlen].Freq++;
713 s->bl_tree[REP_3_6].Freq++;
714 } else if (count <= 10) {
715 s->bl_tree[REPZ_3_10].Freq++;
716 } else {
717 s->bl_tree[REPZ_11_138].Freq++;
718 }
719 count = 0; prevlen = curlen;
720 if (nextlen == 0) {
721 max_count = 138, min_count = 3;
722 } else if (curlen == nextlen) {
723 max_count = 6, min_count = 3;
724 } else {
725 max_count = 7, min_count = 4;
726 }
727 }
728}
729
730/* ===========================================================================
731 * Send a literal or distance tree in compressed form, using the codes in
732 * bl_tree.
733 */
734local void send_tree (deflate_state *s, ct_data *tree, int max_code)
735{
736 int n; /* iterates over all tree elements */
737 int prevlen = -1; /* last emitted length */
738 int curlen; /* length of current code */
739 int nextlen = tree[0].Len; /* length of next code */
740 int count = 0; /* repeat count of the current code */
741 int max_count = 7; /* max repeat count */
742 int min_count = 4; /* min repeat count */
743
744 /* tree[max_code+1].Len = -1; */ /* guard already set */
745 if (nextlen == 0) max_count = 138, min_count = 3;
746
747 for (n = 0; n <= max_code; n++) {
748 curlen = nextlen; nextlen = tree[n+1].Len;
749 if (++count < max_count && curlen == nextlen) {
750 continue;
751 } else if (count < min_count) {
752 do { send_code(s, curlen, s->bl_tree); } while (--count != 0);
753
754 } else if (curlen != 0) {
755 if (curlen != prevlen) {
756 send_code(s, curlen, s->bl_tree); count--;
757 }
758 Assert(count >= 3 && count <= 6, (char*)" 3_6?");
759 send_code(s, REP_3_6, s->bl_tree); send_bits(s, count-3, 2);
760
761 } else if (count <= 10) {
762 send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count-3, 3);
763
764 } else {
765 send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count-11, 7);
766 }
767 count = 0; prevlen = curlen;
768 if (nextlen == 0) {
769 max_count = 138, min_count = 3;
770 } else if (curlen == nextlen) {
771 max_count = 6, min_count = 3;
772 } else {
773 max_count = 7, min_count = 4;
774 }
775 }
776}
777
778/* ===========================================================================
779 * Construct the Huffman tree for the bit lengths and return the index in
780 * bl_order of the last bit length code to send.
781 */
783{
784 int max_blindex; /* index of last bit length code of non zero freq */
785
786 /* Determine the bit length frequencies for literal and distance trees */
789
790 /* Build the bit length tree: */
791 build_tree(s, (tree_desc *)(&(s->bl_desc)));
792 /* opt_len now includes the length of the tree representations, except
793 * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
794 */
795
796 /* Determine the number of bit length codes to send. The pkzip format
797 * requires that at least 4 bit length codes be sent. (appnote.txt says
798 * 3 but the actual value used is 4.)
799 */
800 for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) {
801 if (s->bl_tree[bl_order[max_blindex]].Len != 0) break;
802 }
803 /* Update opt_len to include the bit length tree and counts */
804 s->opt_len += 3*(max_blindex+1) + 5+5+4;
805 Tracev((stderr, (char*)"\ndyn trees: dyn %ld, stat %ld",
806 s->opt_len, s->static_len));
807
808 return max_blindex;
809}
810
811/* ===========================================================================
812 * Send the header for a block using dynamic Huffman trees: the counts, the
813 * lengths of the bit length codes, the literal tree and the distance tree.
814 * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
815 */
816local void send_all_trees(deflate_state *s, int lcodes, int dcodes, int blcodes)
817{
818 int rank; /* index in bl_order */
819
820 Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, (char*)"not enough codes");
821 Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
822 (char*)"too many codes");
823 Tracev((stderr, (char*)"\nbl counts: "));
824 send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */
825 send_bits(s, dcodes-1, 5);
826 send_bits(s, blcodes-4, 4); /* not -3 as stated in appnote.txt */
827 for (rank = 0; rank < blcodes; rank++) {
828 Tracev((stderr, (char*)"\nbl code %2d ", bl_order[rank]));
829 send_bits(s, s->bl_tree[bl_order[rank]].Len, 3);
830 }
831 Tracev((stderr, (char*)"\nbl tree: sent %ld", s->bits_sent));
832
833 send_tree(s, (ct_data *)s->dyn_ltree, lcodes-1); /* literal tree */
834 Tracev((stderr, (char*)"\nlit tree: sent %ld", s->bits_sent));
835
836 send_tree(s, (ct_data *)s->dyn_dtree, dcodes-1); /* distance tree */
837 Tracev((stderr, (char*)"\ndist tree: sent %ld", s->bits_sent));
838}
839
840/* ===========================================================================
841 * Send a stored block
842 */
843void _tr_stored_block(deflate_state *s, charf *buf, ulg stored_len, int eof)
844{
845 send_bits(s, (STORED_BLOCK<<1)+eof, 3); /* send block type */
846#ifdef DEBUG
847 s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L;
848 s->compressed_len += (stored_len + 4) << 3;
849#endif
850 copy_block(s, buf, (unsigned)stored_len, 1); /* with header */
851}
852
853/* ===========================================================================
854 * Send one empty static block to give enough lookahead for inflate.
855 * This takes 10 bits, of which 7 may remain in the bit buffer.
856 * The current inflate code requires 9 bits of lookahead. If the
857 * last two codes for the previous block (real code plus EOB) were coded
858 * on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode
859 * the last real code. In this case we send two empty static blocks instead
860 * of one. (There are no problems if the previous block is stored or fixed.)
861 * To simplify the code, we assume the worst case of last real code encoded
862 * on one bit only.
863 */
865{
866 send_bits(s, STATIC_TREES<<1, 3);
868#ifdef DEBUG
869 s->compressed_len += 10L; /* 3 for block type, 7 for EOB */
870#endif
871 bi_flush(s);
872 /* Of the 10 bits for the empty block, we have already sent
873 * (10 - bi_valid) bits. The lookahead for the last real code (before
874 * the EOB of the previous block) was thus at least one plus the length
875 * of the EOB plus what we have just sent of the empty static block.
876 */
877 if (1 + s->last_eob_len + 10 - s->bi_valid < 9) {
878 send_bits(s, STATIC_TREES<<1, 3);
880#ifdef DEBUG
881 s->compressed_len += 10L;
882#endif
883 bi_flush(s);
884 }
885 s->last_eob_len = 7;
886}
887
888/* ===========================================================================
889 * Determine the best encoding for the current block: dynamic trees, static
890 * trees or store, and output the encoded block to the zip file.
891 */
892void _tr_flush_block(deflate_state *s, charf *buf, ulg stored_len, int eof)
893{
894 ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */
895 int max_blindex = 0; /* index of last bit length code of non zero freq */
896
897 /* Build the Huffman trees unless a stored block is forced */
898 if (s->level > 0) {
899
900 /* Check if the file is ascii or binary */
901 if (s->strm->data_type == Z_UNKNOWN) set_data_type(s);
902
903 /* Construct the literal and distance trees */
904 build_tree(s, (tree_desc *)(&(s->l_desc)));
905 Tracev((stderr, (char*)"\nlit data: dyn %ld, stat %ld", s->opt_len,
906 s->static_len));
907
908 build_tree(s, (tree_desc *)(&(s->d_desc)));
909 Tracev((stderr, (char*)"\ndist data: dyn %ld, stat %ld", s->opt_len,
910 s->static_len));
911 /* At this point, opt_len and static_len are the total bit lengths of
912 * the compressed block data, excluding the tree representations.
913 */
914
915 /* Build the bit length tree for the above two trees, and get the index
916 * in bl_order of the last bit length code to send.
917 */
918 max_blindex = build_bl_tree(s);
919
920 /* Determine the best encoding. Compute the block lengths in bytes. */
921 opt_lenb = (s->opt_len+3+7)>>3;
922 static_lenb = (s->static_len+3+7)>>3;
923
924 Tracev((stderr, (char*)"\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
925 opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
926 s->last_lit));
927
928 if (static_lenb <= opt_lenb) opt_lenb = static_lenb;
929
930 } else {
931 Assert(buf != (char*)0, (char*)"lost buf");
932 opt_lenb = static_lenb = stored_len + 5; /* force a stored block */
933 }
934
935#ifdef FORCE_STORED
936 if (buf != (char*)0) { /* force stored block */
937#else
938 if (stored_len+4 <= opt_lenb && buf != (char*)0) {
939 /* 4: two words for the lengths */
940#endif
941 /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
942 * Otherwise we can't have processed more than WSIZE input bytes since
943 * the last block flush, because compression would have been
944 * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
945 * transform a block into a stored block.
946 */
947 _tr_stored_block(s, buf, stored_len, eof);
948
949#ifdef FORCE_STATIC
950 } else if (static_lenb >= 0) { /* force static trees */
951#else
952 } else if (static_lenb == opt_lenb) {
953#endif
954 send_bits(s, (STATIC_TREES<<1)+eof, 3);
956#ifdef DEBUG
957 s->compressed_len += 3 + s->static_len;
958#endif
959 } else {
960 send_bits(s, (DYN_TREES<<1)+eof, 3);
962 max_blindex+1);
964#ifdef DEBUG
965 s->compressed_len += 3 + s->opt_len;
966#endif
967 }
968 Assert (s->compressed_len == s->bits_sent, (char*)"bad compressed size");
969 /* The above check is made mod 2^32, for files larger than 512 MB
970 * and uLong implemented on 32 bits.
971 */
972 init_block(s);
973
974 if (eof) {
975 bi_windup(s);
976#ifdef DEBUG
977 s->compressed_len += 7; /* align on byte boundary */
978#endif
979 }
980 Tracev((stderr,(char*)"\ncomprlen %lu(%lu) ", s->compressed_len>>3,
981 s->compressed_len-7*eof));
982}
983
984/* ===========================================================================
985 * Save the match info and tally the frequency counts. Return true if
986 * the current block must be flushed.
987 */
988int _tr_tally (deflate_state *s, unsigned dist, unsigned lc)
989{
990 s->d_buf[s->last_lit] = (ush)dist;
991 s->l_buf[s->last_lit++] = (uch)lc;
992 if (dist == 0) {
993 /* lc is the unmatched char */
994 s->dyn_ltree[lc].Freq++;
995 } else {
996 s->matches++;
997 /* Here, lc is the match length - MIN_MATCH */
998 dist--; /* dist = match distance - 1 */
999 Assert((ush)dist < (ush)MAX_DIST(s) &&
1000 (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&
1001 (ush)d_code(dist) < (ush)D_CODES, (char*)"_tr_tally: bad match");
1002
1003 s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++;
1004 s->dyn_dtree[d_code(dist)].Freq++;
1005 }
1006
1007#ifdef TRUNCATE_BLOCK
1008 /* Try to guess if it is profitable to stop the current block here */
1009 if ((s->last_lit & 0x1fff) == 0 && s->level > 2) {
1010 /* Compute an upper bound for the compressed length */
1011 ulg out_length = (ulg)s->last_lit*8L;
1012 ulg in_length = (ulg)((long)s->strstart - s->block_start);
1013 int dcode;
1014 for (dcode = 0; dcode < D_CODES; dcode++) {
1015 out_length += (ulg)s->dyn_dtree[dcode].Freq *
1016 (5L+extra_dbits[dcode]);
1017 }
1018 out_length >>= 3;
1019 Tracev((stderr,(char*)"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
1020 s->last_lit, in_length, out_length,
1021 100L - out_length*100L/in_length));
1022 if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1;
1023 }
1024#endif
1025 return (s->last_lit == s->lit_bufsize-1);
1026 /* We avoid equality with lit_bufsize because of wraparound at 64K
1027 * on 16 bit machines and because stored blocks are restricted to
1028 * 64K-1 bytes.
1029 */
1030}
1031
1032/* ===========================================================================
1033 * Send the block data compressed using the given Huffman trees
1034 */
1036{
1037 unsigned dist; /* distance of matched string */
1038 int lc; /* match length or unmatched char (if dist == 0) */
1039 unsigned lx = 0; /* running index in l_buf */
1040 unsigned code; /* the code to send */
1041 int extra; /* number of extra bits to send */
1042
1043 if (s->last_lit != 0) do {
1044 dist = s->d_buf[lx];
1045 lc = s->l_buf[lx++];
1046 if (dist == 0) {
1047 send_code(s, lc, ltree); /* send a literal byte */
1048 Tracecv(isgraph(lc), (stderr," '%c' ", lc));
1049 } else {
1050 /* Here, lc is the match length - MIN_MATCH */
1051 code = _length_code[lc];
1052 send_code(s, code+LITERALS+1, ltree); /* send the length code */
1053 extra = extra_lbits[code];
1054 if (extra != 0) {
1055 lc -= base_length[code];
1056 send_bits(s, lc, extra); /* send the extra length bits */
1057 }
1058 dist--; /* dist is now the match distance - 1 */
1059 code = d_code(dist);
1060 Assert (code < D_CODES, (char*)"bad d_code");
1061
1062 send_code(s, code, dtree); /* send the distance code */
1063 extra = extra_dbits[code];
1064 if (extra != 0) {
1065 dist -= base_dist[code];
1066 send_bits(s, dist, extra); /* send the extra distance bits */
1067 }
1068 } /* literal or match pair ? */
1069
1070 /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
1071 Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,
1072 (char*)"pendingBuf overflow");
1073
1074 } while (lx < s->last_lit);
1075
1076 send_code(s, END_BLOCK, ltree);
1077 s->last_eob_len = ltree[END_BLOCK].Len;
1078}
1079
1080/* ===========================================================================
1081 * Set the data type to ASCII or BINARY, using a crude approximation:
1082 * binary if more than 20% of the bytes are <= 6 or >= 128, ascii otherwise.
1083 * IN assertion: the fields freq of dyn_ltree are set and the total of all
1084 * frequencies does not exceed 64K (to fit in an int on 16 bit machines).
1085 */
1087{
1088 int n = 0;
1089 unsigned ascii_freq = 0;
1090 unsigned bin_freq = 0;
1091 while (n < 7) bin_freq += s->dyn_ltree[n++].Freq;
1092 while (n < 128) ascii_freq += s->dyn_ltree[n++].Freq;
1093 while (n < LITERALS) bin_freq += s->dyn_ltree[n++].Freq;
1094 s->strm->data_type = bin_freq > (ascii_freq >> 2) ? Z_BINARY : Z_ASCII;
1095}
1096
1097/* ===========================================================================
1098 * Reverse the first len bits of a code, using straightforward code (a faster
1099 * method would use a table)
1100 * IN assertion: 1 <= len <= 15
1101 */
1102local unsigned bi_reverse(unsigned code, int len)
1103{
1104 register unsigned res = 0;
1105 do {
1106 res |= code & 1;
1107 code >>= 1, res <<= 1;
1108 } while (--len > 0);
1109 return res >> 1;
1110}
1111
1112/* ===========================================================================
1113 * Flush the bit buffer, keeping at most 7 bits in it.
1114 */
1116{
1117 if (s->bi_valid == 16) {
1118 put_short(s, s->bi_buf);
1119 s->bi_buf = 0;
1120 s->bi_valid = 0;
1121 } else if (s->bi_valid >= 8) {
1122 put_byte(s, (Byte)s->bi_buf);
1123 s->bi_buf >>= 8;
1124 s->bi_valid -= 8;
1125 }
1126}
1127
1128/* ===========================================================================
1129 * Flush the bit buffer and align the output on a byte boundary
1130 */
1132{
1133 if (s->bi_valid > 8) {
1134 put_short(s, s->bi_buf);
1135 } else if (s->bi_valid > 0) {
1136 put_byte(s, (Byte)s->bi_buf);
1137 }
1138 s->bi_buf = 0;
1139 s->bi_valid = 0;
1140#ifdef DEBUG
1141 s->bits_sent = (s->bits_sent+7) & ~7;
1142#endif
1143}
1144
1145/* ===========================================================================
1146 * Copy a stored block, storing first the length and its
1147 * one's complement if requested.
1148 */
1149local void copy_block(deflate_state *s, charf *buf, unsigned len, int header)
1150{
1151 bi_windup(s); /* align on byte boundary */
1152 s->last_eob_len = 8; /* enough lookahead for inflate */
1153
1154 if (header) {
1155 put_short(s, (ush)len);
1156 put_short(s, (ush)~len);
1157#ifdef DEBUG
1158 s->bits_sent += 2*16;
1159#endif
1160 }
1161#ifdef DEBUG
1162 s->bits_sent += (ulg)len<<3;
1163#endif
1164 while (len--) {
1165 put_byte(s, *buf++);
1166 }
1167}
#define Code
Definition: deflate.h:70
#define HEAP_SIZE
Definition: deflate.h:45
#define MAX_DIST(s)
Definition: deflate.h:270
#define L_CODES
Definition: deflate.h:36
#define LITERALS
Definition: deflate.h:33
#define Len
Definition: deflate.h:72
#define MAX_BITS
Definition: deflate.h:48
#define d_code(dist)
Definition: deflate.h:284
#define put_byte(s, c)
Definition: deflate.h:262
#define D_CODES
Definition: deflate.h:39
#define Freq
Definition: deflate.h:69
#define LENGTH_CODES
Definition: deflate.h:30
#define BL_CODES
Definition: deflate.h:42
uInt last_lit
Definition: deflate.h:230
struct tree_desc_s l_desc
Definition: deflate.h:190
uInt lit_bufsize
Definition: deflate.h:210
struct ct_data_s dyn_dtree[2 *D_CODES+1]
Definition: deflate.h:187
long block_start
Definition: deflate.h:142
uchf * l_buf
Definition: deflate.h:208
ulg static_len
Definition: deflate.h:239
uch depth[2 *L_CODES+1]
Definition: deflate.h:204
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
z_streamp strm
Definition: deflate.h:91
struct tree_desc_s d_desc
Definition: deflate.h:191
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 heap[2 *L_CODES+1]
Definition: deflate.h:197
struct ct_data_s dyn_ltree[HEAP_SIZE]
Definition: deflate.h:186
const intf * extra_bits
Definition: trees.cc:123
const ct_data * static_tree
Definition: trees.cc:122
int max_code
Definition: deflate.h:78
ct_data * dyn_tree
Definition: deflate.h:77
static_tree_desc * stat_desc
Definition: deflate.h:79
void send_all_trees(deflate_state *s, int lcodes, int dcodes, int blcodes)
Definition: trees.cc:816
void build_tree(deflate_state *s, tree_desc *desc)
Definition: trees.cc:606
#define Buf_size
Definition: trees.cc:76
void tr_static_init()
Definition: trees.cc:235
void init_block(deflate_state *s)
Definition: trees.cc:407
void bi_flush(deflate_state *s)
Definition: trees.cc:1115
#define END_BLOCK
Definition: trees.cc:49
const int extra_blbits[BL_CODES]
Definition: trees.cc:68
int _tr_tally(deflate_state *s, unsigned dist, unsigned lc)
Definition: trees.cc:988
void _tr_init(deflate_state *s)
Definition: trees.cc:379
#define REPZ_11_138
Definition: trees.cc:58
#define DIST_CODE_LEN
Definition: trees.cc:85
#define REPZ_3_10
Definition: trees.cc:55
int base_dist[D_CODES]
Definition: trees.cc:114
#define send_code(s, c, tree)
Definition: trees.cc:167
ct_data static_dtree[D_CODES]
Definition: trees.cc:97
void _tr_flush_block(deflate_state *s, charf *buf, ulg stored_len, int eof)
Definition: trees.cc:892
unsigned bi_reverse(unsigned code, int len)
Definition: trees.cc:1102
#define REP_3_6
Definition: trees.cc:52
const int extra_lbits[LENGTH_CODES]
Definition: trees.cc:62
const int extra_dbits[D_CODES]
Definition: trees.cc:65
void _tr_align(deflate_state *s)
Definition: trees.cc:864
void send_tree(deflate_state *s, ct_data *tree, int max_code)
Definition: trees.cc:734
ct_data static_ltree[L_CODES+2]
Definition: trees.cc:90
#define smaller(tree, n, m, depth)
Definition: trees.cc:440
const uch bl_order[BL_CODES]
Definition: trees.cc:71
static_tree_desc static_d_desc
Definition: trees.cc:132
#define MAX_BL_BITS
Definition: trees.cc:46
int base_length[LENGTH_CODES]
Definition: trees.cc:111
void copy_block(deflate_state *s, charf *buf, unsigned len, int header)
Definition: trees.cc:1149
uch _length_code[MAX_MATCH-MIN_MATCH+1]
Definition: trees.cc:108
void _tr_stored_block(deflate_state *s, charf *buf, ulg stored_len, int eof)
Definition: trees.cc:843
uch _dist_code[DIST_CODE_LEN]
Definition: trees.cc:102
void compress_block(deflate_state *s, ct_data *ltree, ct_data *dtree)
Definition: trees.cc:1035
void bi_windup(deflate_state *s)
Definition: trees.cc:1131
void scan_tree(deflate_state *s, ct_data *tree, int max_code)
Definition: trees.cc:692
#define pqremove(s, tree, top)
Definition: trees.cc:429
static_tree_desc static_l_desc
Definition: trees.cc:129
void gen_codes(ct_data *tree, int max_code, ushf *bl_count)
Definition: trees.cc:567
void gen_bitlen(deflate_state *s, tree_desc *desc)
Definition: trees.cc:482
#define SMALLEST
Definition: trees.cc:421
void pqdownheap(deflate_state *s, ct_data *tree, int k)
Definition: trees.cc:450
static_tree_desc static_bl_desc
Definition: trees.cc:135
#define put_short(s, w)
Definition: trees.cc:180
void set_data_type(deflate_state *s)
Definition: trees.cc:1086
#define send_bits(s, value, length)
Definition: trees.cc:214
int build_bl_tree(deflate_state *s)
Definition: trees.cc:782
char FAR charf
Definition: zconf.h:266
unsigned int uInt
Definition: zconf.h:257
#define OF(args)
Definition: zconf.h:164
int FAR intf
Definition: zconf.h:267
unsigned char Byte
Definition: zconf.h:255
#define Z_BINARY
Definition: zlib.h:172
#define Z_UNKNOWN
Definition: zlib.h:174
#define Z_ASCII
Definition: zlib.h:173
#define local
Definition: zutil.h:31
#define STATIC_TREES
Definition: zutil.h:65
unsigned short ush
Definition: zutil.h:37
#define DYN_TREES
Definition: zutil.h:66
#define Tracecv(c, x)
Definition: zutil.h:251
#define Assert(cond, msg)
Definition: zutil.h:246
#define Tracev(x)
Definition: zutil.h:248
#define MIN_MATCH
Definition: zutil.h:69
#define Trace(x)
Definition: zutil.h:247
#define STORED_BLOCK
Definition: zutil.h:64
#define MAX_MATCH
Definition: zutil.h:70
ush FAR ushf
Definition: zutil.h:38
unsigned long ulg
Definition: zutil.h:39
#define Tracevv(x)
Definition: zutil.h:249
unsigned char uch
Definition: zutil.h:35