File indexing completed on 2024-04-21 03:48:32

0001 /* inftrees.h -- header to use inftrees.c
0002  * Copyright (C) 1995-2005, 2010 Mark Adler
0003  * For conditions of distribution and use, see copyright notice in zlib.h
0004  */
0005 
0006 /* WARNING: this file should *not* be used by applications. It is
0007    part of the implementation of the compression library and is
0008    subject to change. Applications should only use zlib.h.
0009  */
0010 
0011 /* Structure for decoding tables.  Each entry provides either the
0012    information needed to do the operation requested by the code that
0013    indexed that table entry, or it provides a pointer to another
0014    table that indexes more bits of the code.  op indicates whether
0015    the entry is a pointer to another table, a literal, a length or
0016    distance, an end-of-block, or an invalid code.  For a table
0017    pointer, the low four bits of op is the number of index bits of
0018    that table.  For a length or distance, the low four bits of op
0019    is the number of extra bits to get after the code.  bits is
0020    the number of bits in this code or part of the code to drop off
0021    of the bit buffer.  val is the actual byte to output in the case
0022    of a literal, the base length or distance, or the offset from
0023    the current table to the next table.  Each entry is four bytes. */
0024 typedef struct {
0025     unsigned char op;           /* operation, extra bits, table bits */
0026     unsigned char bits;         /* bits in this part of the code */
0027     unsigned short val;         /* offset in table or code value */
0028 } code;
0029 
0030 /* op values as set by inflate_table():
0031     00000000 - literal
0032     0000tttt - table link, tttt != 0 is the number of table index bits
0033     0001eeee - length or distance, eeee is the number of extra bits
0034     01100000 - end of block
0035     01000000 - invalid code
0036  */
0037 
0038 /* Maximum size of the dynamic table.  The maximum number of code structures is
0039    1444, which is the sum of 852 for literal/length codes and 592 for distance
0040    codes.  These values were found by exhaustive searches using the program
0041    examples/enough.c found in the zlib distribtution.  The arguments to that
0042    program are the number of symbols, the initial root table size, and the
0043    maximum bit length of a code.  "enough 286 9 15" for literal/length codes
0044    returns returns 852, and "enough 30 6 15" for distance codes returns 592.
0045    The initial root table size (9 or 6) is found in the fifth argument of the
0046    inflate_table() calls in inflate.c and infback.c.  If the root table size is
0047    changed, then these maximum sizes would be need to be recalculated and
0048    updated. */
0049 #define ENOUGH_LENS 852
0050 #define ENOUGH_DISTS 592
0051 #define ENOUGH (ENOUGH_LENS+ENOUGH_DISTS)
0052 
0053 /* Type of code to build for inflate_table() */
0054 typedef enum {
0055     CODES,
0056     LENS,
0057     DISTS
0058 } codetype;
0059 
0060 int ZLIB_INTERNAL inflate_table OF((codetype type, unsigned short FAR *lens,
0061                              unsigned codes, code FAR * FAR *table,
0062                              unsigned FAR *bits, unsigned short FAR *work));