Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

inftrees.c

Go to the documentation of this file.
00001 /* inftrees.c -- generate Huffman trees for efficient decoding
00002  * Copyright (C) 1995-1998 Mark Adler
00003  * For conditions of distribution and use, see copyright notice in zlib.h 
00004  */
00005 
00006 #include "zutil.h"
00007 #include "inftrees.h"
00008 
00009 #if !defined(BUILDFIXED) && !defined(STDC)
00010 #  define BUILDFIXED   /* non ANSI compilers may not accept inffixed.h */
00011 #endif
00012 
00013 const char inflate_copyright[] =
00014    " inflate 1.1.3 Copyright 1995-1998 Mark Adler ";
00015 /*
00016   If you use the zlib library in a product, an acknowledgment is welcome
00017   in the documentation of your product. If for some reason you cannot
00018   include such an acknowledgment, I would appreciate that you keep this
00019   copyright string in the executable of your product.
00020  */
00021 struct internal_state  {int dummy;}; /* for buggy compilers */
00022 
00023 /* simplify the use of the inflate_huft type with some defines */
00024 #define exop word.what.Exop
00025 #define bits word.what.Bits
00026 
00027 
00028 local int huft_build OF((
00029     uIntf *,            /* code lengths in bits */
00030     uInt,               /* number of codes */
00031     uInt,               /* number of "simple" codes */
00032     const uIntf *,      /* list of base values for non-simple codes */
00033     const uIntf *,      /* list of extra bits for non-simple codes */
00034     inflate_huft * FAR*,/* result: starting table */
00035     uIntf *,            /* maximum lookup bits (returns actual) */
00036     inflate_huft *,     /* space for trees */
00037     uInt *,             /* hufts used in space */
00038     uIntf * ));         /* space for values */
00039 
00040 /* Tables for deflate from PKZIP's appnote.txt. */
00041 local const uInt cplens[31] = { /* Copy lengths for literal codes 257..285 */
00042         3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
00043         35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
00044         /* see note #13 above about 258 */
00045 local const uInt cplext[31] = { /* Extra bits for literal codes 257..285 */
00046         0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
00047         3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 112, 112}; /* 112==invalid */
00048 local const uInt cpdist[30] = { /* Copy offsets for distance codes 0..29 */
00049         1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
00050         257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
00051         8193, 12289, 16385, 24577};
00052 local const uInt cpdext[30] = { /* Extra bits for distance codes */
00053         0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
00054         7, 7, 8, 8, 9, 9, 10, 10, 11, 11,
00055         12, 12, 13, 13};
00056 
00057 /*
00058    Huffman code decoding is performed using a multi-level table lookup.
00059    The fastest way to decode is to simply build a lookup table whose
00060    size is determined by the longest code.  However, the time it takes
00061    to build this table can also be a factor if the data being decoded
00062    is not very long.  The most common codes are necessarily the
00063    shortest codes, so those codes dominate the decoding time, and hence
00064    the speed.  The idea is you can have a shorter table that decodes the
00065    shorter, more probable codes, and then point to subsidiary tables for
00066    the longer codes.  The time it costs to decode the longer codes is
00067    then traded against the time it takes to make longer tables.
00068 
00069    This results of this trade are in the variables lbits and dbits
00070    below.  lbits is the number of bits the first level table for literal/
00071    length codes can decode in one step, and dbits is the same thing for
00072    the distance codes.  Subsequent tables are also less than or equal to
00073    those sizes.  These values may be adjusted either when all of the
00074    codes are shorter than that, in which case the longest code length in
00075    bits is used, or when the shortest code is *longer* than the requested
00076    table size, in which case the length of the shortest code in bits is
00077    used.
00078 
00079    There are two different values for the two tables, since they code a
00080    different number of possibilities each.  The literal/length table
00081    codes 286 possible values, or in a flat code, a little over eight
00082    bits.  The distance table codes 30 possible values, or a little less
00083    than five bits, flat.  The optimum values for speed end up being
00084    about one bit more than those, so lbits is 8+1 and dbits is 5+1.
00085    The optimum values may differ though from machine to machine, and
00086    possibly even between compilers.  Your mileage may vary.
00087  */
00088 
00089 
00090 /* If BMAX needs to be larger than 16, then h and x[] should be uLong. */
00091 #define BMAX 15         /* maximum bit length of any code */
00092 
00093 local int huft_build(b, n, s, d, e, t, m, hp, hn, v)
00094 uIntf *b;               /* code lengths in bits (all assumed <= BMAX) */
00095 uInt n;                 /* number of codes (assumed <= 288) */
00096 uInt s;                 /* number of simple-valued codes (0..s-1) */
00097 const uIntf *d;         /* list of base values for non-simple codes */
00098 const uIntf *e;         /* list of extra bits for non-simple codes */
00099 inflate_huft * FAR *t;  /* result: starting table */
00100 uIntf *m;               /* maximum lookup bits, returns actual */
00101 inflate_huft *hp;       /* space for trees */
00102 uInt *hn;               /* hufts used in space */
00103 uIntf *v;               /* working area: values in order of bit length */
00104 /* Given a list of code lengths and a maximum table size, make a set of
00105    tables to decode that set of codes.  Return Z_OK on success, Z_BUF_ERROR
00106    if the given code set is incomplete (the tables are still built in this
00107    case), Z_DATA_ERROR if the input is invalid (an over-subscribed set of
00108    lengths), or Z_MEM_ERROR if not enough memory. */
00109 {
00110 
00111   uInt a;                       /* counter for codes of length k */
00112   uInt c[BMAX+1];               /* bit length count table */
00113   uInt f;                       /* i repeats in table every f entries */
00114   int g;                        /* maximum code length */
00115   int h;                        /* table level */
00116   register uInt i;              /* counter, current code */
00117   register uInt j;              /* counter */
00118   register int k;               /* number of bits in current code */
00119   int l;                        /* bits per table (returned in m) */
00120   uInt mask;                    /* (1 << w) - 1, to avoid cc -O bug on HP */
00121   register uIntf *p;            /* pointer into c[], b[], or v[] */
00122   inflate_huft *q;              /* points to current table */
00123   struct inflate_huft_s r;      /* table entry for structure assignment */
00124   inflate_huft *u[BMAX];        /* table stack */
00125   register int w;               /* bits before this table == (l * h) */
00126   uInt x[BMAX+1];               /* bit offsets, then code stack */
00127   uIntf *xp;                    /* pointer into x */
00128   int y;                        /* number of dummy codes added */
00129   uInt z;                       /* number of entries in current table */
00130 
00131 
00132   /* Generate counts for each bit length */
00133   p = c;
00134 #define C0 *p++ = 0;
00135 #define C2 C0 C0 C0 C0
00136 #define C4 C2 C2 C2 C2
00137   C4                            /* clear c[]--assume BMAX+1 is 16 */
00138   p = b;  i = n;
00139   do {
00140     c[*p++]++;                  /* assume all entries <= BMAX */
00141   } while (--i);
00142   if (c[0] == n)                /* null input--all zero length codes */
00143   {
00144     *t = (inflate_huft *)Z_NULL;
00145     *m = 0;
00146     return Z_OK;
00147   }
00148 
00149 
00150   /* Find minimum and maximum length, bound *m by those */
00151   l = *m;
00152   for (j = 1; j <= BMAX; j++)
00153     if (c[j])
00154       break;
00155   k = j;                        /* minimum code length */
00156   if ((uInt)l < j)
00157     l = j;
00158   for (i = BMAX; i; i--)
00159     if (c[i])
00160       break;
00161   g = i;                        /* maximum code length */
00162   if ((uInt)l > i)
00163     l = i;
00164   *m = l;
00165 
00166 
00167   /* Adjust last length count to fill out codes, if needed */
00168   for (y = 1 << j; j < i; j++, y <<= 1)
00169     if ((y -= c[j]) < 0)
00170       return Z_DATA_ERROR;
00171   if ((y -= c[i]) < 0)
00172     return Z_DATA_ERROR;
00173   c[i] += y;
00174 
00175 
00176   /* Generate starting offsets into the value table for each length */
00177   x[1] = j = 0;
00178   p = c + 1;  xp = x + 2;
00179   while (--i) {                 /* note that i == g from above */
00180     *xp++ = (j += *p++);
00181   }
00182 
00183 
00184   /* Make a table of values in order of bit lengths */
00185   p = b;  i = 0;
00186   do {
00187     if ((j = *p++) != 0)
00188       v[x[j]++] = i;
00189   } while (++i < n);
00190   n = x[g];                     /* set n to length of v */
00191 
00192 
00193   /* Generate the Huffman codes and for each, make the table entries */
00194   x[0] = i = 0;                 /* first Huffman code is zero */
00195   p = v;                        /* grab values in bit order */
00196   h = -1;                       /* no tables yet--level -1 */
00197   w = -l;                       /* bits decoded == (l * h) */
00198   u[0] = (inflate_huft *)Z_NULL;        /* just to keep compilers happy */
00199   q = (inflate_huft *)Z_NULL;   /* ditto */
00200   z = 0;                        /* ditto */
00201 
00202   /* go through the bit lengths (k already is bits in shortest code) */
00203   for (; k <= g; k++)
00204   {
00205     a = c[k];
00206     while (a--)
00207     {
00208       /* here i is the Huffman code of length k bits for value *p */
00209       /* make tables up to required level */
00210       while (k > w + l)
00211       {
00212         h++;
00213         w += l;                 /* previous table always l bits */
00214 
00215         /* compute minimum size table less than or equal to l bits */
00216         z = g - w;
00217         z = z > (uInt)l ? l : z;        /* table size upper limit */
00218         if ((f = 1 << (j = k - w)) > a + 1)     /* try a k-w bit table */
00219         {                       /* too few codes for k-w bit table */
00220           f -= a + 1;           /* deduct codes from patterns left */
00221           xp = c + k;
00222           if (j < z)
00223             while (++j < z)     /* try smaller tables up to z bits */
00224             {
00225               if ((f <<= 1) <= *++xp)
00226                 break;          /* enough codes to use up j bits */
00227               f -= *xp;         /* else deduct codes from patterns */
00228             }
00229         }
00230         z = 1 << j;             /* table entries for j-bit table */
00231 
00232         /* allocate new table */
00233         if (*hn + z > MANY)     /* (note: doesn't matter for fixed) */
00234           return Z_MEM_ERROR;   /* not enough memory */
00235         u[h] = q = hp + *hn;
00236         *hn += z;
00237 
00238         /* connect to last table, if there is one */
00239         if (h)
00240         {
00241           x[h] = i;             /* save pattern for backing up */
00242           r.bits = (Byte)l;     /* bits to dump before this table */
00243           r.exop = (Byte)j;     /* bits in this table */
00244           j = i >> (w - l);
00245           r.base = (uInt)(q - u[h-1] - j);   /* offset to this table */
00246           u[h-1][j] = r;        /* connect to last table */
00247         }
00248         else
00249           *t = q;               /* first table is returned result */
00250       }
00251 
00252       /* set up table entry in r */
00253       r.bits = (Byte)(k - w);
00254       if (p >= v + n)
00255         r.exop = 128 + 64;      /* out of values--invalid code */
00256       else if (*p < s)
00257       {
00258         r.exop = (Byte)(*p < 256 ? 0 : 32 + 64);     /* 256 is end-of-block */
00259         r.base = *p++;          /* simple code is just the value */
00260       }
00261       else
00262       {
00263         r.exop = (Byte)(e[*p - s] + 16 + 64);/* non-simple--look up in lists */
00264         r.base = d[*p++ - s];
00265       }
00266 
00267       /* fill code-like entries with r */
00268       f = 1 << (k - w);
00269       for (j = i >> w; j < z; j += f)
00270         q[j] = r;
00271 
00272       /* backwards increment the k-bit code i */
00273       for (j = 1 << (k - 1); i & j; j >>= 1)
00274         i ^= j;
00275       i ^= j;
00276 
00277       /* backup over finished tables */
00278       mask = (1 << w) - 1;      /* needed on HP, cc -O bug */
00279       while ((i & mask) != x[h])
00280       {
00281         h--;                    /* don't need to update q */
00282         w -= l;
00283         mask = (1 << w) - 1;
00284       }
00285     }
00286   }
00287 
00288 
00289   /* Return Z_BUF_ERROR if we were given an incomplete table */
00290   return y != 0 && g != 1 ? Z_BUF_ERROR : Z_OK;
00291 }
00292 
00293 
00294 int inflate_trees_bits(c, bb, tb, hp, z)
00295 uIntf *c;               /* 19 code lengths */
00296 uIntf *bb;              /* bits tree desired/actual depth */
00297 inflate_huft * FAR *tb; /* bits tree result */
00298 inflate_huft *hp;       /* space for trees */
00299 z_streamp z;            /* for messages */
00300 {
00301   int r;
00302   uInt hn = 0;          /* hufts used in space */
00303   uIntf *v;             /* work area for huft_build */
00304 
00305   if ((v = (uIntf*)ZALLOC(z, 19, sizeof(uInt))) == Z_NULL)
00306     return Z_MEM_ERROR;
00307   r = huft_build(c, 19, 19, (uIntf*)Z_NULL, (uIntf*)Z_NULL,
00308                  tb, bb, hp, &hn, v);
00309   if (r == Z_DATA_ERROR)
00310     z->msg = (char*)"oversubscribed dynamic bit lengths tree";
00311   else if (r == Z_BUF_ERROR || *bb == 0)
00312   {
00313     z->msg = (char*)"incomplete dynamic bit lengths tree";
00314     r = Z_DATA_ERROR;
00315   }
00316   ZFREE(z, v);
00317   return r;
00318 }
00319 
00320 
00321 int inflate_trees_dynamic(nl, nd, c, bl, bd, tl, td, hp, z)
00322 uInt nl;                /* number of literal/length codes */
00323 uInt nd;                /* number of distance codes */
00324 uIntf *c;               /* that many (total) code lengths */
00325 uIntf *bl;              /* literal desired/actual bit depth */
00326 uIntf *bd;              /* distance desired/actual bit depth */
00327 inflate_huft * FAR *tl; /* literal/length tree result */
00328 inflate_huft * FAR *td; /* distance tree result */
00329 inflate_huft *hp;       /* space for trees */
00330 z_streamp z;            /* for messages */
00331 {
00332   int r;
00333   uInt hn = 0;          /* hufts used in space */
00334   uIntf *v;             /* work area for huft_build */
00335 
00336   /* allocate work area */
00337   if ((v = (uIntf*)ZALLOC(z, 288, sizeof(uInt))) == Z_NULL)
00338     return Z_MEM_ERROR;
00339 
00340   /* build literal/length tree */
00341   r = huft_build(c, nl, 257, cplens, cplext, tl, bl, hp, &hn, v);
00342   if (r != Z_OK || *bl == 0)
00343   {
00344     if (r == Z_DATA_ERROR)
00345       z->msg = (char*)"oversubscribed literal/length tree";
00346     else if (r != Z_MEM_ERROR)
00347     {
00348       z->msg = (char*)"incomplete literal/length tree";
00349       r = Z_DATA_ERROR;
00350     }
00351     ZFREE(z, v);
00352     return r;
00353   }
00354 
00355   /* build distance tree */
00356   r = huft_build(c + nl, nd, 0, cpdist, cpdext, td, bd, hp, &hn, v);
00357   if (r != Z_OK || (*bd == 0 && nl > 257))
00358   {
00359     if (r == Z_DATA_ERROR)
00360       z->msg = (char*)"oversubscribed distance tree";
00361     else if (r == Z_BUF_ERROR) {
00362 #ifdef PKZIP_BUG_WORKAROUND
00363       r = Z_OK;
00364     }
00365 #else
00366       z->msg = (char*)"incomplete distance tree";
00367       r = Z_DATA_ERROR;
00368     }
00369     else if (r != Z_MEM_ERROR)
00370     {
00371       z->msg = (char*)"empty distance tree with lengths";
00372       r = Z_DATA_ERROR;
00373     }
00374     ZFREE(z, v);
00375     return r;
00376 #endif
00377   }
00378 
00379   /* done */
00380   ZFREE(z, v);
00381   return Z_OK;
00382 }
00383 
00384 
00385 /* build fixed tables only once--keep them here */
00386 #ifdef BUILDFIXED
00387 local int fixed_built = 0;
00388 #define FIXEDH 544      /* number of hufts used by fixed tables */
00389 local inflate_huft fixed_mem[FIXEDH];
00390 local uInt fixed_bl;
00391 local uInt fixed_bd;
00392 local inflate_huft *fixed_tl;
00393 local inflate_huft *fixed_td;
00394 #else
00395 #include "inffixed.h"
00396 #endif
00397 
00398 
00399 int inflate_trees_fixed(bl, bd, tl, td, z)
00400 uIntf *bl;               /* literal desired/actual bit depth */
00401 uIntf *bd;               /* distance desired/actual bit depth */
00402 inflate_huft * FAR *tl;  /* literal/length tree result */
00403 inflate_huft * FAR *td;  /* distance tree result */
00404 z_streamp z;             /* for memory allocation */
00405 {
00406 #ifdef BUILDFIXED
00407   /* build fixed tables if not already */
00408   if (!fixed_built)
00409   {
00410     int k;              /* temporary variable */
00411     uInt f = 0;         /* number of hufts used in fixed_mem */
00412     uIntf *c;           /* length list for huft_build */
00413     uIntf *v;           /* work area for huft_build */
00414 
00415     /* allocate memory */
00416     if ((c = (uIntf*)ZALLOC(z, 288, sizeof(uInt))) == Z_NULL)
00417       return Z_MEM_ERROR;
00418     if ((v = (uIntf*)ZALLOC(z, 288, sizeof(uInt))) == Z_NULL)
00419     {
00420       ZFREE(z, c);
00421       return Z_MEM_ERROR;
00422     }
00423 
00424     /* literal table */
00425     for (k = 0; k < 144; k++)
00426       c[k] = 8;
00427     for (; k < 256; k++)
00428       c[k] = 9;
00429     for (; k < 280; k++)
00430       c[k] = 7;
00431     for (; k < 288; k++)
00432       c[k] = 8;
00433     fixed_bl = 9;
00434     huft_build(c, 288, 257, cplens, cplext, &fixed_tl, &fixed_bl,
00435                fixed_mem, &f, v);
00436 
00437     /* distance table */
00438     for (k = 0; k < 30; k++)
00439       c[k] = 5;
00440     fixed_bd = 5;
00441     huft_build(c, 30, 0, cpdist, cpdext, &fixed_td, &fixed_bd,
00442                fixed_mem, &f, v);
00443 
00444     /* done */
00445     ZFREE(z, v);
00446     ZFREE(z, c);
00447     fixed_built = 1;
00448   }
00449 #endif
00450   *bl = fixed_bl;
00451   *bd = fixed_bd;
00452   *tl = fixed_tl;
00453   *td = fixed_td;
00454   return Z_OK;
00455 }

Generated on Sat Oct 13 16:08:38 2001 for XMILL by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001