xref: /OK3568_Linux_fs/kernel/lib/zlib_inflate/inftrees.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun #ifndef INFTREES_H
2*4882a593Smuzhiyun #define INFTREES_H
3*4882a593Smuzhiyun 
4*4882a593Smuzhiyun /* inftrees.h -- header to use inftrees.c
5*4882a593Smuzhiyun  * Copyright (C) 1995-2005 Mark Adler
6*4882a593Smuzhiyun  * For conditions of distribution and use, see copyright notice in zlib.h
7*4882a593Smuzhiyun  */
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun /* WARNING: this file should *not* be used by applications. It is
10*4882a593Smuzhiyun    part of the implementation of the compression library and is
11*4882a593Smuzhiyun    subject to change. Applications should only use zlib.h.
12*4882a593Smuzhiyun  */
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun /* Structure for decoding tables.  Each entry provides either the
15*4882a593Smuzhiyun    information needed to do the operation requested by the code that
16*4882a593Smuzhiyun    indexed that table entry, or it provides a pointer to another
17*4882a593Smuzhiyun    table that indexes more bits of the code.  op indicates whether
18*4882a593Smuzhiyun    the entry is a pointer to another table, a literal, a length or
19*4882a593Smuzhiyun    distance, an end-of-block, or an invalid code.  For a table
20*4882a593Smuzhiyun    pointer, the low four bits of op is the number of index bits of
21*4882a593Smuzhiyun    that table.  For a length or distance, the low four bits of op
22*4882a593Smuzhiyun    is the number of extra bits to get after the code.  bits is
23*4882a593Smuzhiyun    the number of bits in this code or part of the code to drop off
24*4882a593Smuzhiyun    of the bit buffer.  val is the actual byte to output in the case
25*4882a593Smuzhiyun    of a literal, the base length or distance, or the offset from
26*4882a593Smuzhiyun    the current table to the next table.  Each entry is four bytes. */
27*4882a593Smuzhiyun typedef struct {
28*4882a593Smuzhiyun     unsigned char op;           /* operation, extra bits, table bits */
29*4882a593Smuzhiyun     unsigned char bits;         /* bits in this part of the code */
30*4882a593Smuzhiyun     unsigned short val;         /* offset in table or code value */
31*4882a593Smuzhiyun } code;
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun /* op values as set by inflate_table():
34*4882a593Smuzhiyun     00000000 - literal
35*4882a593Smuzhiyun     0000tttt - table link, tttt != 0 is the number of table index bits
36*4882a593Smuzhiyun     0001eeee - length or distance, eeee is the number of extra bits
37*4882a593Smuzhiyun     01100000 - end of block
38*4882a593Smuzhiyun     01000000 - invalid code
39*4882a593Smuzhiyun  */
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun /* Maximum size of dynamic tree.  The maximum found in a long but non-
42*4882a593Smuzhiyun    exhaustive search was 1444 code structures (852 for length/literals
43*4882a593Smuzhiyun    and 592 for distances, the latter actually the result of an
44*4882a593Smuzhiyun    exhaustive search).  The true maximum is not known, but the value
45*4882a593Smuzhiyun    below is more than safe. */
46*4882a593Smuzhiyun #define ENOUGH 2048
47*4882a593Smuzhiyun #define MAXD 592
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun /* Type of code to build for inftable() */
50*4882a593Smuzhiyun typedef enum {
51*4882a593Smuzhiyun     CODES,
52*4882a593Smuzhiyun     LENS,
53*4882a593Smuzhiyun     DISTS
54*4882a593Smuzhiyun } codetype;
55*4882a593Smuzhiyun 
56*4882a593Smuzhiyun extern int zlib_inflate_table (codetype type, unsigned short *lens,
57*4882a593Smuzhiyun                              unsigned codes, code **table,
58*4882a593Smuzhiyun                              unsigned *bits, unsigned short *work);
59*4882a593Smuzhiyun #endif
60