|
ZLIB
|
Deflate internal state. More...
#include <deflate.h>
Data Fields | |
| z_streamp | strm |
| pointer back to this zlib stream | |
| int | status |
| as the name implies | |
| Bytef * | pending_buf |
| output still pending | |
| ulg | pending_buf_size |
| size of pending_buf | |
| Bytef * | pending_out |
| next pending byte to output to the stream | |
| ulg | pending |
| nb of bytes in the pending buffer | |
| int | wrap |
| bit 0 true for zlib, bit 1 true for gzip | |
| gz_headerp | gzhead |
| gzip header information to write | |
| ulg | gzindex |
| where in extra, name, or comment | |
| Byte | method |
| can only be DEFLATED | |
| int | last_flush |
| value of flush param for previous deflate call | |
used by deflate.c: | |
| uInt | w_size |
| LZ77 window size (32K by default) | |
| uInt | w_bits |
| log2(w_size) (8..16) | |
| uInt | w_mask |
| w_size - 1 | |
| Bytef * | window |
| Sliding window. | |
| ulg | window_size |
| Actual size of window: 2*wSize, except when the user input buffer is directly used as sliding window. | |
| Posf * | prev |
| Link to older string with same hash index. | |
| Posf * | head |
| Heads of the hash chains or NIL. | |
| uInt | ins_h |
| hash index of string to be inserted | |
| uInt | hash_size |
| number of elements in hash table | |
| uInt | hash_bits |
| log2(hash_size) | |
| uInt | hash_mask |
| hash_size-1 | |
| uInt | hash_shift |
| Number of bits by which ins_h must be shifted at each input step. | |
| long | block_start |
| Window position at the beginning of the current output block. | |
| uInt | match_length |
| length of best match | |
| IPos | prev_match |
| previous match | |
| int | match_available |
| set if previous match exists | |
| uInt | strstart |
| start of string to insert | |
| uInt | match_start |
| start of matching string | |
| uInt | lookahead |
| number of valid bytes ahead in window | |
| uInt | prev_length |
| Length of the best match at previous step. | |
| uInt | max_chain_length |
| To speed up deflation, hash chains are never searched beyond this length. | |
| uInt | max_lazy_match |
| Attempt to find a better match only when the current match is strictly smaller than this value. | |
| int | level |
| compression level (1..9) | |
| int | strategy |
| favor or force Huffman coding | |
| uInt | good_match |
| Use a faster search when the previous match is longer than this. | |
| int | nice_match |
| Stop searching when current match exceeds this. | |
used by trees.c: | |
| struct ct_data_s | dyn_ltree [HEAP_SIZE] |
| literal and length tree | |
| struct ct_data_s | dyn_dtree [2 *D_CODES+1] |
| distance tree | |
| struct ct_data_s | bl_tree [2 *BL_CODES+1] |
| Huffman tree for bit lengths. | |
| struct tree_desc_s | l_desc |
| desc. | |
| struct tree_desc_s | d_desc |
| desc. | |
| struct tree_desc_s | bl_desc |
| desc. | |
| ush | bl_count [MAX_BITS+1] |
| number of codes at each bit length for an optimal tree | |
| int | heap [2 *L_CODES+1] |
| heap used to build the Huffman trees | |
| int | heap_len |
| number of elements in the heap | |
| int | heap_max |
| element of largest frequency | |
| uch | depth [2 *L_CODES+1] |
| Depth of each subtree used as tie breaker for trees of equal frequency. | |
| uchf * | sym_buf |
| buffer for distances and literals/lengths | |
| uInt | lit_bufsize |
| Size of match buffer for literals/lengths. | |
| uInt | sym_next |
| running index in symbol buffer | |
| uInt | sym_end |
| symbol table full when sym_next reaches this | |
| ulg | opt_len |
| bit length of current block with optimal trees | |
| ulg | static_len |
| bit length of current block with static trees | |
| uInt | matches |
| number of string matches in current block | |
| uInt | insert |
| bytes at end of window left to insert | |
| ush | bi_buf |
| Output buffer. | |
| int | bi_valid |
| Number of valid bits in bi_buf. | |
| ulg | high_water |
| High water mark offset in window for initialized bytes – bytes above this are set to zero in order to avoid memory check warnings when longest match routines access bytes past the input. | |
Deflate internal state.
| ush deflate_state::bi_buf |
Output buffer.
bits are inserted starting at the bottom (least significant bits).
| int deflate_state::bi_valid |
Number of valid bits in bi_buf.
All bits above the last valid bit are always zero.
| struct tree_desc_s deflate_state::bl_desc |
desc.
for bit length tree
| long deflate_state::block_start |
Window position at the beginning of the current output block.
Gets negative when the window is moved backwards.
| struct tree_desc_s deflate_state::d_desc |
desc.
for distance tree
| uInt deflate_state::hash_shift |
Number of bits by which ins_h must be shifted at each input step.
It must be such that after MIN_MATCH steps, the oldest byte no longer takes part in the hash key, that is: hash_shift * MIN_MATCH >= hash_bits
| ulg deflate_state::high_water |
High water mark offset in window for initialized bytes – bytes above this are set to zero in order to avoid memory check warnings when longest match routines access bytes past the input.
This is then updated to the new high water mark.
| struct tree_desc_s deflate_state::l_desc |
desc.
for literal tree
| uInt deflate_state::lit_bufsize |
Size of match buffer for literals/lengths.
There are 4 reasons for limiting lit_bufsize to 64K:
| uInt deflate_state::max_chain_length |
To speed up deflation, hash chains are never searched beyond this length.
A higher limit improves compression ratio but degrades the speed.
| uInt deflate_state::max_lazy_match |
Attempt to find a better match only when the current match is strictly smaller than this value.
This mechanism is used only for compression levels >= 4.
| Posf* deflate_state::prev |
Link to older string with same hash index.
To limit the size of this array to 64K, this link is maintained only for the last 32K strings. An index in this array is thus a window index modulo 32K.
| uInt deflate_state::prev_length |
Length of the best match at previous step.
Matches not greater than this are discarded. This is used in the lazy match evaluation.
| Bytef* deflate_state::window |
Sliding window.
Input bytes are read into the second half of the window, and move to the first half later to keep a dictionary of at least wSize bytes.
With this organization, matches are limited to a distance of wSize-MAX_MATCH bytes, but this ensures that IO is always performed with a length multiple of the block size. Also, it limits the window size to 64K, which is quite useful on MSDOS.