Lines Matching refs:wr

292 static inline size_t INIT get_pos(struct writer *wr)
295 wr->global_pos + wr->buffer_pos;
298 static inline uint8_t INIT peek_old_byte(struct writer *wr,
301 if (!wr->flush) {
303 while (offs > wr->header->dict_size)
304 offs -= wr->header->dict_size;
305 pos = wr->buffer_pos - offs;
306 return wr->buffer[pos];
308 uint32_t pos = wr->buffer_pos - offs;
309 while (pos >= wr->header->dict_size)
310 pos += wr->header->dict_size;
311 return wr->buffer[pos];
316 static inline int INIT write_byte(struct writer *wr, uint8_t byte)
318 wr->buffer[wr->buffer_pos++] = wr->previous_byte = byte;
319 if (wr->flush && wr->buffer_pos == wr->header->dict_size) {
320 wr->buffer_pos = 0;
321 wr->global_pos += wr->header->dict_size;
322 if (wr->flush((char *)wr->buffer, wr->header->dict_size)
323 != wr->header->dict_size)
330 static inline int INIT copy_byte(struct writer *wr, uint32_t offs)
332 return write_byte(wr, peek_old_byte(wr, offs));
335 static inline int INIT copy_bytes(struct writer *wr,
339 if (copy_byte(wr, rep0))
342 } while (len != 0 && wr->buffer_pos < wr->header->dst_size);
347 static inline int INIT process_bit0(struct writer *wr, struct rc *rc,
355 * (((get_pos(wr) & literal_pos_mask) << lc)
356 + (wr->previous_byte >> (8 - lc))))
360 int match_byte = peek_old_byte(wr, cst->rep0);
388 return write_byte(wr, mi);
391 static inline int INIT process_bit1(struct writer *wr, struct rc *rc,
422 return copy_byte(wr, cst->rep0);
525 if (cst->rep0 > wr->header->dict_size
526 || cst->rep0 > get_pos(wr))
532 return copy_bytes(wr, cst->rep0, len);
553 struct writer wr;
572 wr.header = &header;
573 wr.flush = flush;
574 wr.global_pos = 0;
575 wr.previous_byte = 0;
576 wr.buffer_pos = 0;
613 wr.buffer = output;
615 wr.bufsize = MIN(header.dst_size, header.dict_size);
616 wr.buffer = large_malloc(wr.bufsize);
618 if (wr.buffer == NULL)
631 while (get_pos(&wr) < header.dst_size) {
632 int pos_state = get_pos(&wr) & pos_state_mask;
636 if (process_bit0(&wr, &rc, &cst, p, pos_state, prob,
642 if (process_bit1(&wr, &rc, &cst, p, pos_state, prob)) {
655 if (!wr.flush || wr.flush(wr.buffer, wr.buffer_pos) == wr.buffer_pos)
661 large_free(wr.buffer);