Lines Matching refs:wr

287 static inline size_t INIT get_pos(struct writer *wr)  in get_pos()  argument
290 wr->global_pos + wr->buffer_pos; in get_pos()
293 static inline uint8_t INIT peek_old_byte(struct writer *wr, in peek_old_byte() argument
296 if (!wr->flush) { in peek_old_byte()
298 while (offs > wr->header->dict_size) in peek_old_byte()
299 offs -= wr->header->dict_size; in peek_old_byte()
300 pos = wr->buffer_pos - offs; in peek_old_byte()
301 return wr->buffer[pos]; in peek_old_byte()
303 uint32_t pos = wr->buffer_pos - offs; in peek_old_byte()
304 while (pos >= wr->header->dict_size) in peek_old_byte()
305 pos += wr->header->dict_size; in peek_old_byte()
306 return wr->buffer[pos]; in peek_old_byte()
311 static inline int INIT write_byte(struct writer *wr, uint8_t byte) in write_byte() argument
313 wr->buffer[wr->buffer_pos++] = wr->previous_byte = byte; in write_byte()
314 if (wr->flush && wr->buffer_pos == wr->header->dict_size) { in write_byte()
315 wr->buffer_pos = 0; in write_byte()
316 wr->global_pos += wr->header->dict_size; in write_byte()
317 if (wr->flush((char *)wr->buffer, wr->header->dict_size) in write_byte()
318 != wr->header->dict_size) in write_byte()
325 static inline int INIT copy_byte(struct writer *wr, uint32_t offs) in copy_byte() argument
327 return write_byte(wr, peek_old_byte(wr, offs)); in copy_byte()
330 static inline int INIT copy_bytes(struct writer *wr, in copy_bytes() argument
334 if (copy_byte(wr, rep0)) in copy_bytes()
337 } while (len != 0 && wr->buffer_pos < wr->header->dst_size); in copy_bytes()
342 static inline int INIT process_bit0(struct writer *wr, struct rc *rc, in process_bit0() argument
350 * (((get_pos(wr) & literal_pos_mask) << lc) in process_bit0()
351 + (wr->previous_byte >> (8 - lc)))) in process_bit0()
355 int match_byte = peek_old_byte(wr, cst->rep0); in process_bit0()
383 return write_byte(wr, mi); in process_bit0()
386 static inline int INIT process_bit1(struct writer *wr, struct rc *rc, in process_bit1() argument
417 return copy_byte(wr, cst->rep0); in process_bit1()
520 if (cst->rep0 > wr->header->dict_size in process_bit1()
521 || cst->rep0 > get_pos(wr)) in process_bit1()
527 return copy_bytes(wr, cst->rep0, len); in process_bit1()
548 struct writer wr; in unlzma() local
567 wr.header = &header; in unlzma()
568 wr.flush = flush; in unlzma()
569 wr.global_pos = 0; in unlzma()
570 wr.previous_byte = 0; in unlzma()
571 wr.buffer_pos = 0; in unlzma()
608 wr.buffer = output; in unlzma()
610 wr.bufsize = MIN(header.dst_size, header.dict_size); in unlzma()
611 wr.buffer = large_malloc(wr.bufsize); in unlzma()
613 if (wr.buffer == NULL) in unlzma()
626 while (get_pos(&wr) < header.dst_size) { in unlzma()
627 int pos_state = get_pos(&wr) & pos_state_mask; in unlzma()
631 if (process_bit0(&wr, &rc, &cst, p, pos_state, prob, in unlzma()
637 if (process_bit1(&wr, &rc, &cst, p, pos_state, prob)) { in unlzma()
650 if (!wr.flush || wr.flush(wr.buffer, wr.buffer_pos) == wr.buffer_pos) in unlzma()
656 large_free(wr.buffer); in unlzma()