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