Annotation of embedaddon/rsync/zlib/deflate.h, revision 1.1.1.2

1.1       misho       1: /* deflate.h -- internal compression state
1.1.1.2 ! misho       2:  * Copyright (C) 1995-2012 Jean-loup Gailly
1.1       misho       3:  * For conditions of distribution and use, see copyright notice in zlib.h
                      4:  */
                      5: 
                      6: /* WARNING: this file should *not* be used by applications. It is
                      7:    part of the implementation of the compression library and is
                      8:    subject to change. Applications should only use zlib.h.
                      9:  */
                     10: 
                     11: /* @(#) $Id$ */
                     12: 
                     13: #ifndef DEFLATE_H
                     14: #define DEFLATE_H
                     15: 
                     16: #include "zutil.h"
                     17: 
                     18: /* define NO_GZIP when compiling if you want to disable gzip header and
                     19:    trailer creation by deflate().  NO_GZIP would be used to avoid linking in
                     20:    the crc code when it is not needed.  For shared libraries, gzip encoding
                     21:    should be left enabled. */
                     22: #ifndef NO_GZIP
                     23: #  define GZIP
                     24: #endif
                     25: 
                     26: /* ===========================================================================
                     27:  * Internal compression state.
                     28:  */
                     29: 
                     30: #define LENGTH_CODES 29
                     31: /* number of length codes, not counting the special END_BLOCK code */
                     32: 
                     33: #define LITERALS  256
                     34: /* number of literal bytes 0..255 */
                     35: 
                     36: #define L_CODES (LITERALS+1+LENGTH_CODES)
                     37: /* number of Literal or Length codes, including the END_BLOCK code */
                     38: 
                     39: #define D_CODES   30
                     40: /* number of distance codes */
                     41: 
                     42: #define BL_CODES  19
                     43: /* number of codes used to transfer the bit lengths */
                     44: 
                     45: #define HEAP_SIZE (2*L_CODES+1)
                     46: /* maximum heap size */
                     47: 
                     48: #define MAX_BITS 15
                     49: /* All codes must not exceed MAX_BITS bits */
                     50: 
1.1.1.2 ! misho      51: #define Buf_size 16
        !            52: /* size of bit buffer in bi_buf */
        !            53: 
1.1       misho      54: #define INIT_STATE    42
                     55: #define EXTRA_STATE   69
                     56: #define NAME_STATE    73
                     57: #define COMMENT_STATE 91
                     58: #define HCRC_STATE   103
                     59: #define BUSY_STATE   113
                     60: #define FINISH_STATE 666
                     61: /* Stream status */
                     62: 
                     63: 
                     64: /* Data structure describing a single value and its code string. */
                     65: typedef struct ct_data_s {
                     66:     union {
                     67:         ush  freq;       /* frequency count */
                     68:         ush  code;       /* bit string */
                     69:     } fc;
                     70:     union {
                     71:         ush  dad;        /* father node in Huffman tree */
                     72:         ush  len;        /* length of bit string */
                     73:     } dl;
                     74: } FAR ct_data;
                     75: 
                     76: #define Freq fc.freq
                     77: #define Code fc.code
                     78: #define Dad  dl.dad
                     79: #define Len  dl.len
                     80: 
                     81: typedef struct static_tree_desc_s  static_tree_desc;
                     82: 
                     83: typedef struct tree_desc_s {
                     84:     ct_data *dyn_tree;           /* the dynamic tree */
                     85:     int     max_code;            /* largest code with non zero frequency */
                     86:     static_tree_desc *stat_desc; /* the corresponding static tree */
                     87: } FAR tree_desc;
                     88: 
                     89: typedef ush Pos;
                     90: typedef Pos FAR Posf;
                     91: typedef unsigned IPos;
                     92: 
                     93: /* A Pos is an index in the character window. We use short instead of int to
                     94:  * save space in the various tables. IPos is used only for parameter passing.
                     95:  */
                     96: 
                     97: typedef struct internal_state {
                     98:     z_streamp strm;      /* pointer back to this zlib stream */
                     99:     int   status;        /* as the name implies */
                    100:     Bytef *pending_buf;  /* output still pending */
                    101:     ulg   pending_buf_size; /* size of pending_buf */
                    102:     Bytef *pending_out;  /* next pending byte to output to the stream */
                    103:     uInt   pending;      /* nb of bytes in the pending buffer */
                    104:     int   wrap;          /* bit 0 true for zlib, bit 1 true for gzip */
                    105:     gz_headerp  gzhead;  /* gzip header information to write */
                    106:     uInt   gzindex;      /* where in extra, name, or comment */
1.1.1.2 ! misho     107:     Byte  method;        /* can only be DEFLATED */
1.1       misho     108:     int   last_flush;    /* value of flush param for previous deflate call */
                    109: 
                    110:                 /* used by deflate.c: */
                    111: 
                    112:     uInt  w_size;        /* LZ77 window size (32K by default) */
                    113:     uInt  w_bits;        /* log2(w_size)  (8..16) */
                    114:     uInt  w_mask;        /* w_size - 1 */
                    115: 
                    116:     Bytef *window;
                    117:     /* Sliding window. Input bytes are read into the second half of the window,
                    118:      * and move to the first half later to keep a dictionary of at least wSize
                    119:      * bytes. With this organization, matches are limited to a distance of
                    120:      * wSize-MAX_MATCH bytes, but this ensures that IO is always
                    121:      * performed with a length multiple of the block size. Also, it limits
                    122:      * the window size to 64K, which is quite useful on MSDOS.
                    123:      * To do: use the user input buffer as sliding window.
                    124:      */
                    125: 
                    126:     ulg window_size;
                    127:     /* Actual size of window: 2*wSize, except when the user input buffer
                    128:      * is directly used as sliding window.
                    129:      */
                    130: 
                    131:     Posf *prev;
                    132:     /* Link to older string with same hash index. To limit the size of this
                    133:      * array to 64K, this link is maintained only for the last 32K strings.
                    134:      * An index in this array is thus a window index modulo 32K.
                    135:      */
                    136: 
                    137:     Posf *head; /* Heads of the hash chains or NIL. */
                    138: 
                    139:     uInt  ins_h;          /* hash index of string to be inserted */
                    140:     uInt  hash_size;      /* number of elements in hash table */
                    141:     uInt  hash_bits;      /* log2(hash_size) */
                    142:     uInt  hash_mask;      /* hash_size-1 */
                    143: 
                    144:     uInt  hash_shift;
                    145:     /* Number of bits by which ins_h must be shifted at each input
                    146:      * step. It must be such that after MIN_MATCH steps, the oldest
                    147:      * byte no longer takes part in the hash key, that is:
                    148:      *   hash_shift * MIN_MATCH >= hash_bits
                    149:      */
                    150: 
                    151:     long block_start;
                    152:     /* Window position at the beginning of the current output block. Gets
                    153:      * negative when the window is moved backwards.
                    154:      */
                    155: 
                    156:     uInt match_length;           /* length of best match */
                    157:     IPos prev_match;             /* previous match */
                    158:     int match_available;         /* set if previous match exists */
                    159:     uInt strstart;               /* start of string to insert */
                    160:     uInt match_start;            /* start of matching string */
                    161:     uInt lookahead;              /* number of valid bytes ahead in window */
                    162: 
                    163:     uInt prev_length;
                    164:     /* Length of the best match at previous step. Matches not greater than this
                    165:      * are discarded. This is used in the lazy match evaluation.
                    166:      */
                    167: 
                    168:     uInt max_chain_length;
                    169:     /* To speed up deflation, hash chains are never searched beyond this
                    170:      * length.  A higher limit improves compression ratio but degrades the
                    171:      * speed.
                    172:      */
                    173: 
                    174:     uInt max_lazy_match;
                    175:     /* Attempt to find a better match only when the current match is strictly
                    176:      * smaller than this value. This mechanism is used only for compression
                    177:      * levels >= 4.
                    178:      */
                    179: #   define max_insert_length  max_lazy_match
                    180:     /* Insert new strings in the hash table only if the match length is not
                    181:      * greater than this length. This saves time but degrades compression.
                    182:      * max_insert_length is used only for compression levels <= 3.
                    183:      */
                    184: 
                    185:     int level;    /* compression level (1..9) */
                    186:     int strategy; /* favor or force Huffman coding*/
                    187: 
                    188:     uInt good_match;
                    189:     /* Use a faster search when the previous match is longer than this */
                    190: 
                    191:     int nice_match; /* Stop searching when current match exceeds this */
                    192: 
                    193:                 /* used by trees.c: */
1.1.1.2 ! misho     194:     /* Didn't use ct_data typedef below to suppress compiler warning */
1.1       misho     195:     struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */
                    196:     struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
                    197:     struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */
                    198: 
                    199:     struct tree_desc_s l_desc;               /* desc. for literal tree */
                    200:     struct tree_desc_s d_desc;               /* desc. for distance tree */
                    201:     struct tree_desc_s bl_desc;              /* desc. for bit length tree */
                    202: 
                    203:     ush bl_count[MAX_BITS+1];
                    204:     /* number of codes at each bit length for an optimal tree */
                    205: 
                    206:     int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */
                    207:     int heap_len;               /* number of elements in the heap */
                    208:     int heap_max;               /* element of largest frequency */
                    209:     /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
                    210:      * The same heap array is used to build all trees.
                    211:      */
                    212: 
                    213:     uch depth[2*L_CODES+1];
                    214:     /* Depth of each subtree used as tie breaker for trees of equal frequency
                    215:      */
                    216: 
                    217:     uchf *l_buf;          /* buffer for literals or lengths */
                    218: 
                    219:     uInt  lit_bufsize;
                    220:     /* Size of match buffer for literals/lengths.  There are 4 reasons for
                    221:      * limiting lit_bufsize to 64K:
                    222:      *   - frequencies can be kept in 16 bit counters
                    223:      *   - if compression is not successful for the first block, all input
                    224:      *     data is still in the window so we can still emit a stored block even
                    225:      *     when input comes from standard input.  (This can also be done for
                    226:      *     all blocks if lit_bufsize is not greater than 32K.)
                    227:      *   - if compression is not successful for a file smaller than 64K, we can
                    228:      *     even emit a stored file instead of a stored block (saving 5 bytes).
                    229:      *     This is applicable only for zip (not gzip or zlib).
                    230:      *   - creating new Huffman trees less frequently may not provide fast
                    231:      *     adaptation to changes in the input data statistics. (Take for
                    232:      *     example a binary file with poorly compressible code followed by
                    233:      *     a highly compressible string table.) Smaller buffer sizes give
                    234:      *     fast adaptation but have of course the overhead of transmitting
                    235:      *     trees more frequently.
                    236:      *   - I can't count above 4
                    237:      */
                    238: 
                    239:     uInt last_lit;      /* running index in l_buf */
                    240: 
                    241:     ushf *d_buf;
                    242:     /* Buffer for distances. To simplify the code, d_buf and l_buf have
                    243:      * the same number of elements. To use different lengths, an extra flag
                    244:      * array would be necessary.
                    245:      */
                    246: 
                    247:     ulg opt_len;        /* bit length of current block with optimal trees */
                    248:     ulg static_len;     /* bit length of current block with static trees */
                    249:     uInt matches;       /* number of string matches in current block */
1.1.1.2 ! misho     250:     uInt insert;        /* bytes at end of window left to insert */
1.1       misho     251: 
                    252: #ifdef DEBUG
                    253:     ulg compressed_len; /* total bit length of compressed file mod 2^32 */
                    254:     ulg bits_sent;      /* bit length of compressed data sent mod 2^32 */
                    255: #endif
                    256: 
                    257:     ush bi_buf;
                    258:     /* Output buffer. bits are inserted starting at the bottom (least
                    259:      * significant bits).
                    260:      */
                    261:     int bi_valid;
                    262:     /* Number of valid bits in bi_buf.  All bits above the last valid bit
                    263:      * are always zero.
                    264:      */
                    265: 
1.1.1.2 ! misho     266:     ulg high_water;
        !           267:     /* High water mark offset in window for initialized bytes -- bytes above
        !           268:      * this are set to zero in order to avoid memory check warnings when
        !           269:      * longest match routines access bytes past the input.  This is then
        !           270:      * updated to the new high water mark.
        !           271:      */
        !           272: 
1.1       misho     273: } FAR deflate_state;
                    274: 
                    275: /* Output a byte on the stream.
                    276:  * IN assertion: there is enough room in pending_buf.
                    277:  */
                    278: #define put_byte(s, c) {s->pending_buf[s->pending++] = (c);}
                    279: 
                    280: 
                    281: #define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
                    282: /* Minimum amount of lookahead, except at the end of the input file.
                    283:  * See deflate.c for comments about the MIN_MATCH+1.
                    284:  */
                    285: 
                    286: #define MAX_DIST(s)  ((s)->w_size-MIN_LOOKAHEAD)
                    287: /* In order to simplify the code, particularly on 16 bit machines, match
                    288:  * distances are limited to MAX_DIST instead of WSIZE.
                    289:  */
                    290: 
1.1.1.2 ! misho     291: #define WIN_INIT MAX_MATCH
        !           292: /* Number of bytes after end of data in window to initialize in order to avoid
        !           293:    memory checker errors from longest match routines */
        !           294: 
1.1       misho     295:         /* in trees.c */
1.1.1.2 ! misho     296: void ZLIB_INTERNAL _tr_init OF((deflate_state *s));
        !           297: int ZLIB_INTERNAL _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc));
        !           298: void ZLIB_INTERNAL _tr_flush_block OF((deflate_state *s, charf *buf,
        !           299:                         ulg stored_len, int last));
        !           300: void ZLIB_INTERNAL _tr_flush_bits OF((deflate_state *s));
        !           301: void ZLIB_INTERNAL _tr_align OF((deflate_state *s));
        !           302: void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf,
        !           303:                         ulg stored_len, int last));
1.1       misho     304: 
                    305: #define d_code(dist) \
                    306:    ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)])
                    307: /* Mapping from a distance to a distance code. dist is the distance - 1 and
                    308:  * must not have side effects. _dist_code[256] and _dist_code[257] are never
                    309:  * used.
                    310:  */
                    311: 
                    312: #ifndef DEBUG
                    313: /* Inline versions of _tr_tally for speed: */
                    314: 
                    315: #if defined(GEN_TREES_H) || !defined(STDC)
1.1.1.2 ! misho     316:   extern uch ZLIB_INTERNAL _length_code[];
        !           317:   extern uch ZLIB_INTERNAL _dist_code[];
1.1       misho     318: #else
1.1.1.2 ! misho     319:   extern const uch ZLIB_INTERNAL _length_code[];
        !           320:   extern const uch ZLIB_INTERNAL _dist_code[];
1.1       misho     321: #endif
                    322: 
                    323: # define _tr_tally_lit(s, c, flush) \
                    324:   { uch cc = (c); \
                    325:     s->d_buf[s->last_lit] = 0; \
                    326:     s->l_buf[s->last_lit++] = cc; \
                    327:     s->dyn_ltree[cc].Freq++; \
                    328:     flush = (s->last_lit == s->lit_bufsize-1); \
                    329:    }
                    330: # define _tr_tally_dist(s, distance, length, flush) \
                    331:   { uch len = (length); \
                    332:     ush dist = (distance); \
                    333:     s->d_buf[s->last_lit] = dist; \
                    334:     s->l_buf[s->last_lit++] = len; \
                    335:     dist--; \
                    336:     s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \
                    337:     s->dyn_dtree[d_code(dist)].Freq++; \
                    338:     flush = (s->last_lit == s->lit_bufsize-1); \
                    339:   }
                    340: #else
                    341: # define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c)
                    342: # define _tr_tally_dist(s, distance, length, flush) \
                    343:               flush = _tr_tally(s, distance, length)
                    344: #endif
                    345: 
                    346: #endif /* DEFLATE_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>