~ubuntu-branches/ubuntu/trusty/horae/trusty

« back to all changes in this revision

Viewing changes to 0CPAN/Compress-Zlib-1.41/zlib-src/inftrees.c

  • Committer: Bazaar Package Importer
  • Author(s): Carlo Segre
  • Date: 2008-02-23 23:13:02 UTC
  • mfrom: (2.1.2 hardy)
  • Revision ID: james.westby@ubuntu.com-20080223231302-mnyyxs3icvrus4ke
Tags: 066-3
Apply patch to athena_parts/misc.pl for compatibility with 
perl-tk 804.28.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* inftrees.c -- generate Huffman trees for efficient decoding
2
 
 * Copyright (C) 1995-2005 Mark Adler
3
 
 * For conditions of distribution and use, see copyright notice in zlib.h
4
 
 */
5
 
 
6
 
#include "zutil.h"
7
 
#include "inftrees.h"
8
 
 
9
 
#define MAXBITS 15
10
 
 
11
 
const char inflate_copyright[] =
12
 
   " inflate 1.2.3 Copyright 1995-2005 Mark Adler ";
13
 
/*
14
 
  If you use the zlib library in a product, an acknowledgment is welcome
15
 
  in the documentation of your product. If for some reason you cannot
16
 
  include such an acknowledgment, I would appreciate that you keep this
17
 
  copyright string in the executable of your product.
18
 
 */
19
 
 
20
 
/*
21
 
   Build a set of tables to decode the provided canonical Huffman code.
22
 
   The code lengths are lens[0..codes-1].  The result starts at *table,
23
 
   whose indices are 0..2^bits-1.  work is a writable array of at least
24
 
   lens shorts, which is used as a work area.  type is the type of code
25
 
   to be generated, CODES, LENS, or DISTS.  On return, zero is success,
26
 
   -1 is an invalid code, and +1 means that ENOUGH isn't enough.  table
27
 
   on return points to the next available entry's address.  bits is the
28
 
   requested root table index bits, and on return it is the actual root
29
 
   table index bits.  It will differ if the request is greater than the
30
 
   longest code or if it is less than the shortest code.
31
 
 */
32
 
int inflate_table(type, lens, codes, table, bits, work)
33
 
codetype type;
34
 
unsigned short FAR *lens;
35
 
unsigned codes;
36
 
code FAR * FAR *table;
37
 
unsigned FAR *bits;
38
 
unsigned short FAR *work;
39
 
{
40
 
    unsigned len;               /* a code's length in bits */
41
 
    unsigned sym;               /* index of code symbols */
42
 
    unsigned min, max;          /* minimum and maximum code lengths */
43
 
    unsigned root;              /* number of index bits for root table */
44
 
    unsigned curr;              /* number of index bits for current table */
45
 
    unsigned drop;              /* code bits to drop for sub-table */
46
 
    int left;                   /* number of prefix codes available */
47
 
    unsigned used;              /* code entries in table used */
48
 
    unsigned huff;              /* Huffman code */
49
 
    unsigned incr;              /* for incrementing code, index */
50
 
    unsigned fill;              /* index for replicating entries */
51
 
    unsigned low;               /* low bits for current root entry */
52
 
    unsigned mask;              /* mask for low root bits */
53
 
    code this;                  /* table entry for duplication */
54
 
    code FAR *next;             /* next available space in table */
55
 
    const unsigned short FAR *base;     /* base value table to use */
56
 
    const unsigned short FAR *extra;    /* extra bits table to use */
57
 
    int end;                    /* use base and extra for symbol > end */
58
 
    unsigned short count[MAXBITS+1];    /* number of codes of each length */
59
 
    unsigned short offs[MAXBITS+1];     /* offsets in table for each length */
60
 
    static const unsigned short lbase[31] = { /* Length codes 257..285 base */
61
 
        3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
62
 
        35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
63
 
    static const unsigned short lext[31] = { /* Length codes 257..285 extra */
64
 
        16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
65
 
        19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 201, 196};
66
 
    static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
67
 
        1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
68
 
        257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
69
 
        8193, 12289, 16385, 24577, 0, 0};
70
 
    static const unsigned short dext[32] = { /* Distance codes 0..29 extra */
71
 
        16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
72
 
        23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
73
 
        28, 28, 29, 29, 64, 64};
74
 
 
75
 
    /*
76
 
       Process a set of code lengths to create a canonical Huffman code.  The
77
 
       code lengths are lens[0..codes-1].  Each length corresponds to the
78
 
       symbols 0..codes-1.  The Huffman code is generated by first sorting the
79
 
       symbols by length from short to long, and retaining the symbol order
80
 
       for codes with equal lengths.  Then the code starts with all zero bits
81
 
       for the first code of the shortest length, and the codes are integer
82
 
       increments for the same length, and zeros are appended as the length
83
 
       increases.  For the deflate format, these bits are stored backwards
84
 
       from their more natural integer increment ordering, and so when the
85
 
       decoding tables are built in the large loop below, the integer codes
86
 
       are incremented backwards.
87
 
 
88
 
       This routine assumes, but does not check, that all of the entries in
89
 
       lens[] are in the range 0..MAXBITS.  The caller must assure this.
90
 
       1..MAXBITS is interpreted as that code length.  zero means that that
91
 
       symbol does not occur in this code.
92
 
 
93
 
       The codes are sorted by computing a count of codes for each length,
94
 
       creating from that a table of starting indices for each length in the
95
 
       sorted table, and then entering the symbols in order in the sorted
96
 
       table.  The sorted table is work[], with that space being provided by
97
 
       the caller.
98
 
 
99
 
       The length counts are used for other purposes as well, i.e. finding
100
 
       the minimum and maximum length codes, determining if there are any
101
 
       codes at all, checking for a valid set of lengths, and looking ahead
102
 
       at length counts to determine sub-table sizes when building the
103
 
       decoding tables.
104
 
     */
105
 
 
106
 
    /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
107
 
    for (len = 0; len <= MAXBITS; len++)
108
 
        count[len] = 0;
109
 
    for (sym = 0; sym < codes; sym++)
110
 
        count[lens[sym]]++;
111
 
 
112
 
    /* bound code lengths, force root to be within code lengths */
113
 
    root = *bits;
114
 
    for (max = MAXBITS; max >= 1; max--)
115
 
        if (count[max] != 0) break;
116
 
    if (root > max) root = max;
117
 
    if (max == 0) {                     /* no symbols to code at all */
118
 
        this.op = (unsigned char)64;    /* invalid code marker */
119
 
        this.bits = (unsigned char)1;
120
 
        this.val = (unsigned short)0;
121
 
        *(*table)++ = this;             /* make a table to force an error */
122
 
        *(*table)++ = this;
123
 
        *bits = 1;
124
 
        return 0;     /* no symbols, but wait for decoding to report error */
125
 
    }
126
 
    for (min = 1; min <= MAXBITS; min++)
127
 
        if (count[min] != 0) break;
128
 
    if (root < min) root = min;
129
 
 
130
 
    /* check for an over-subscribed or incomplete set of lengths */
131
 
    left = 1;
132
 
    for (len = 1; len <= MAXBITS; len++) {
133
 
        left <<= 1;
134
 
        left -= count[len];
135
 
        if (left < 0) return -1;        /* over-subscribed */
136
 
    }
137
 
    if (left > 0 && (type == CODES || max != 1))
138
 
        return -1;                      /* incomplete set */
139
 
 
140
 
    /* generate offsets into symbol table for each length for sorting */
141
 
    offs[1] = 0;
142
 
    for (len = 1; len < MAXBITS; len++)
143
 
        offs[len + 1] = offs[len] + count[len];
144
 
 
145
 
    /* sort symbols by length, by symbol order within each length */
146
 
    for (sym = 0; sym < codes; sym++)
147
 
        if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym;
148
 
 
149
 
    /*
150
 
       Create and fill in decoding tables.  In this loop, the table being
151
 
       filled is at next and has curr index bits.  The code being used is huff
152
 
       with length len.  That code is converted to an index by dropping drop
153
 
       bits off of the bottom.  For codes where len is less than drop + curr,
154
 
       those top drop + curr - len bits are incremented through all values to
155
 
       fill the table with replicated entries.
156
 
 
157
 
       root is the number of index bits for the root table.  When len exceeds
158
 
       root, sub-tables are created pointed to by the root entry with an index
159
 
       of the low root bits of huff.  This is saved in low to check for when a
160
 
       new sub-table should be started.  drop is zero when the root table is
161
 
       being filled, and drop is root when sub-tables are being filled.
162
 
 
163
 
       When a new sub-table is needed, it is necessary to look ahead in the
164
 
       code lengths to determine what size sub-table is needed.  The length
165
 
       counts are used for this, and so count[] is decremented as codes are
166
 
       entered in the tables.
167
 
 
168
 
       used keeps track of how many table entries have been allocated from the
169
 
       provided *table space.  It is checked when a LENS table is being made
170
 
       against the space in *table, ENOUGH, minus the maximum space needed by
171
 
       the worst case distance code, MAXD.  This should never happen, but the
172
 
       sufficiency of ENOUGH has not been proven exhaustively, hence the check.
173
 
       This assumes that when type == LENS, bits == 9.
174
 
 
175
 
       sym increments through all symbols, and the loop terminates when
176
 
       all codes of length max, i.e. all codes, have been processed.  This
177
 
       routine permits incomplete codes, so another loop after this one fills
178
 
       in the rest of the decoding tables with invalid code markers.
179
 
     */
180
 
 
181
 
    /* set up for code type */
182
 
    switch (type) {
183
 
    case CODES:
184
 
        base = extra = work;    /* dummy value--not used */
185
 
        end = 19;
186
 
        break;
187
 
    case LENS:
188
 
        base = lbase;
189
 
        base -= 257;
190
 
        extra = lext;
191
 
        extra -= 257;
192
 
        end = 256;
193
 
        break;
194
 
    default:            /* DISTS */
195
 
        base = dbase;
196
 
        extra = dext;
197
 
        end = -1;
198
 
    }
199
 
 
200
 
    /* initialize state for loop */
201
 
    huff = 0;                   /* starting code */
202
 
    sym = 0;                    /* starting code symbol */
203
 
    len = min;                  /* starting code length */
204
 
    next = *table;              /* current table to fill in */
205
 
    curr = root;                /* current table index bits */
206
 
    drop = 0;                   /* current bits to drop from code for index */
207
 
    low = (unsigned)(-1);       /* trigger new sub-table when len > root */
208
 
    used = 1U << root;          /* use root table entries */
209
 
    mask = used - 1;            /* mask for comparing low */
210
 
 
211
 
    /* check available table space */
212
 
    if (type == LENS && used >= ENOUGH - MAXD)
213
 
        return 1;
214
 
 
215
 
    /* process all codes and make table entries */
216
 
    for (;;) {
217
 
        /* create table entry */
218
 
        this.bits = (unsigned char)(len - drop);
219
 
        if ((int)(work[sym]) < end) {
220
 
            this.op = (unsigned char)0;
221
 
            this.val = work[sym];
222
 
        }
223
 
        else if ((int)(work[sym]) > end) {
224
 
            this.op = (unsigned char)(extra[work[sym]]);
225
 
            this.val = base[work[sym]];
226
 
        }
227
 
        else {
228
 
            this.op = (unsigned char)(32 + 64);         /* end of block */
229
 
            this.val = 0;
230
 
        }
231
 
 
232
 
        /* replicate for those indices with low len bits equal to huff */
233
 
        incr = 1U << (len - drop);
234
 
        fill = 1U << curr;
235
 
        min = fill;                 /* save offset to next table */
236
 
        do {
237
 
            fill -= incr;
238
 
            next[(huff >> drop) + fill] = this;
239
 
        } while (fill != 0);
240
 
 
241
 
        /* backwards increment the len-bit code huff */
242
 
        incr = 1U << (len - 1);
243
 
        while (huff & incr)
244
 
            incr >>= 1;
245
 
        if (incr != 0) {
246
 
            huff &= incr - 1;
247
 
            huff += incr;
248
 
        }
249
 
        else
250
 
            huff = 0;
251
 
 
252
 
        /* go to next symbol, update count, len */
253
 
        sym++;
254
 
        if (--(count[len]) == 0) {
255
 
            if (len == max) break;
256
 
            len = lens[work[sym]];
257
 
        }
258
 
 
259
 
        /* create new sub-table if needed */
260
 
        if (len > root && (huff & mask) != low) {
261
 
            /* if first time, transition to sub-tables */
262
 
            if (drop == 0)
263
 
                drop = root;
264
 
 
265
 
            /* increment past last table */
266
 
            next += min;            /* here min is 1 << curr */
267
 
 
268
 
            /* determine length of next table */
269
 
            curr = len - drop;
270
 
            left = (int)(1 << curr);
271
 
            while (curr + drop < max) {
272
 
                left -= count[curr + drop];
273
 
                if (left <= 0) break;
274
 
                curr++;
275
 
                left <<= 1;
276
 
            }
277
 
 
278
 
            /* check for enough space */
279
 
            used += 1U << curr;
280
 
            if (type == LENS && used >= ENOUGH - MAXD)
281
 
                return 1;
282
 
 
283
 
            /* point entry in root table to sub-table */
284
 
            low = huff & mask;
285
 
            (*table)[low].op = (unsigned char)curr;
286
 
            (*table)[low].bits = (unsigned char)root;
287
 
            (*table)[low].val = (unsigned short)(next - *table);
288
 
        }
289
 
    }
290
 
 
291
 
    /*
292
 
       Fill in rest of table for incomplete codes.  This loop is similar to the
293
 
       loop above in incrementing huff for table indices.  It is assumed that
294
 
       len is equal to curr + drop, so there is no loop needed to increment
295
 
       through high index bits.  When the current sub-table is filled, the loop
296
 
       drops back to the root table to fill in any remaining entries there.
297
 
     */
298
 
    this.op = (unsigned char)64;                /* invalid code marker */
299
 
    this.bits = (unsigned char)(len - drop);
300
 
    this.val = (unsigned short)0;
301
 
    while (huff != 0) {
302
 
        /* when done with sub-table, drop back to root table */
303
 
        if (drop != 0 && (huff & mask) != low) {
304
 
            drop = 0;
305
 
            len = root;
306
 
            next = *table;
307
 
            this.bits = (unsigned char)len;
308
 
        }
309
 
 
310
 
        /* put invalid code marker in table */
311
 
        next[huff >> drop] = this;
312
 
 
313
 
        /* backwards increment the len-bit code huff */
314
 
        incr = 1U << (len - 1);
315
 
        while (huff & incr)
316
 
            incr >>= 1;
317
 
        if (incr != 0) {
318
 
            huff &= incr - 1;
319
 
            huff += incr;
320
 
        }
321
 
        else
322
 
            huff = 0;
323
 
    }
324
 
 
325
 
    /* set return parameters */
326
 
    *table += used;
327
 
    *bits = root;
328
 
    return 0;
329
 
}