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