s->gzhead = NULL;
s->w_bits = (unsigned int)windowBits;
s->w_size = 1 << s->w_bits;
- s->w_mask = s->w_size - 1;
s->high_water = 0; /* nothing written to s->window yet */
unsigned int w_size; /* LZ77 window size (32K by default) */
unsigned int w_bits; /* log2(w_size) (8..16) */
- unsigned int w_mask; /* w_size - 1 */
unsigned int lookahead; /* number of valid bytes ahead in window */
unsigned int high_water;
* distances are limited to MAX_DIST instead of WSIZE.
*/
+#define W_MASK(s) ((s)->w_size - 1)
+/* Window mask: w_size is always a power of 2, so w_mask = w_size - 1 */
+
#define WIN_INIT STD_MAX_MATCH
/* Number of bytes after end of data in window to initialize in order to avoid
memory checker errors from longest match routines */
head = s->head[hm];
if (LIKELY(head != str)) {
- s->prev[str & s->w_mask] = head;
+ s->prev[str & W_MASK(s)] = head;
s->head[hm] = (Pos)str;
}
return head;
head = s->head[hm];
if (LIKELY(head != str)) {
- s->prev[str & s->w_mask] = head;
+ s->prev[str & W_MASK(s)] = head;
s->head[hm] = (Pos)str;
}
return head;
/* Local pointers to avoid indirection */
Pos *headp = s->head;
Pos *prevp = s->prev;
- const unsigned int w_mask = s->w_mask;
+ const unsigned int w_mask = W_MASK(s);
for (Pos idx = (Pos)str; strstart < strend; idx++, strstart++) {
uint32_t val, hm;
*/
Z_INTERNAL uint32_t LONGEST_MATCH(deflate_state *const s, Pos cur_match) {
unsigned int strstart = s->strstart;
- const unsigned wmask = s->w_mask;
+ const unsigned wmask = W_MASK(s);
unsigned char *window = s->window;
unsigned char *scan = window + strstart;
Z_REGISTER unsigned char *mbase_start = window;
// Set up window parameters
s->w_size = MAX_WSIZE;
s->w_bits = 15;
- s->w_mask = MAX_WSIZE - 1;
s->window_size = TEST_WINDOW_SIZE;
// Allocate window