diff options
author | Mark Adler <madler@alumni.caltech.edu> | 2011-09-09 23:19:55 -0700 |
---|---|---|
committer | Mark Adler <madler@alumni.caltech.edu> | 2011-09-09 23:19:55 -0700 |
commit | 965fe72aed580d518c979c9a33b49e7df28205f7 (patch) | |
tree | d2471c968f71224c415a9b6cb3b4ca01bd0a94ab /deflate.h | |
parent | b8c9ecb0765fc39423c07613d909c5193378bdfd (diff) | |
download | zlib-965fe72aed580d518c979c9a33b49e7df28205f7.tar.gz |
zlib 1.1.0v1.1.0
Diffstat (limited to 'deflate.h')
-rw-r--r-- | deflate.h | 42 |
1 files changed, 42 insertions, 0 deletions
@@ -273,4 +273,46 @@ ulg _tr_flush_block OF((deflate_state *s, charf *buf, ulg stored_len, void _tr_align OF((deflate_state *s)); void _tr_stored_block OF((deflate_state *s, charf *buf, ulg stored_len, int eof)); + +#define d_code(dist) \ + ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)]) +/* Mapping from a distance to a distance code. dist is the distance - 1 and + * must not have side effects. _dist_code[256] and _dist_code[257] are never + * used. + */ + +#ifndef DEBUG +/* Inline versions of _tr_tally for speed: */ + +#if defined(GEN_TREES_H) || !defined(STDC) + extern uch _length_code[]; + extern uch _dist_code[]; +#else + extern const uch _length_code[]; + extern const uch _dist_code[]; +#endif + +# define _tr_tally_lit(s, c, flush) \ + { uch cc = (c); \ + s->d_buf[s->last_lit] = 0; \ + s->l_buf[s->last_lit++] = cc; \ + s->dyn_ltree[cc].Freq++; \ + flush = (s->last_lit == s->lit_bufsize-1); \ + } +# define _tr_tally_dist(s, distance, length, flush) \ + { uch len = (length); \ + ush dist = (distance); \ + s->d_buf[s->last_lit] = dist; \ + s->l_buf[s->last_lit++] = len; \ + dist--; \ + s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ + s->dyn_dtree[d_code(dist)].Freq++; \ + flush = (s->last_lit == s->lit_bufsize-1); \ + } +#else +# define _tr_tally_lit(s, c, flush) _tr_tally(s, 0, c, flush) +# define _tr_tally_dist(s, distance, length, flush) \ + _tr_tally(s, distance, length, flush) +#endif + #endif |