Lines Matching defs:coder

33 	/// Next coder in the chain
81 fill_window(lzma_coder *coder, const lzma_allocator *allocator,
85 assert(coder->mf.read_pos <= coder->mf.write_pos);
88 if (coder->mf.read_pos >= coder->mf.size - coder->mf.keep_size_after)
89 move_window(&coder->mf);
94 size_t write_pos = coder->mf.write_pos;
96 if (coder->next.code == NULL) {
98 lzma_bufcpy(in, in_pos, in_size, coder->mf.buffer,
99 &write_pos, coder->mf.size);
105 ret = coder->next.code(coder->next.coder, allocator,
107 coder->mf.buffer, &write_pos,
108 coder->mf.size, action);
111 coder->mf.write_pos = write_pos;
117 memzero(coder->mf.buffer + write_pos, LZMA_MEMCMPLEN_EXTRA);
126 coder->mf.action = action;
127 coder->mf.read_limit = coder->mf.write_pos;
129 } else if (coder->mf.write_pos > coder->mf.keep_size_after) {
133 coder->mf.read_limit = coder->mf.write_pos
134 - coder->mf.keep_size_after;
138 if (coder->mf.pending > 0
139 && coder->mf.read_pos < coder->mf.read_limit) {
140 // Match finder may update coder->pending and expects it to
142 const uint32_t pending = coder->mf.pending;
143 coder->mf.pending = 0;
147 assert(coder->mf.read_pos >= pending);
148 coder->mf.read_pos -= pending;
152 coder->mf.skip(&coder->mf, pending);
166 lzma_coder *coder = coder_ptr;
170 // Read more data to coder->mf.buffer if needed.
171 if (coder->mf.action == LZMA_RUN && coder->mf.read_pos
172 >= coder->mf.read_limit)
173 return_if_error(fill_window(coder, allocator,
177 const lzma_ret ret = coder->lz.code(coder->lz.coder,
178 &coder->mf, out, out_pos, out_size);
183 coder->mf.action = LZMA_RUN;
488 lzma_coder *coder = coder_ptr;
490 lzma_next_end(&coder->next, allocator);
492 lzma_free(coder->mf.son, allocator);
493 lzma_free(coder->mf.hash, allocator);
494 lzma_free(coder->mf.buffer, allocator);
496 if (coder->lz.end != NULL)
497 coder->lz.end(coder->lz.coder, allocator);
499 lzma_free(coder->lz.coder, allocator);
501 lzma_free(coder, allocator);
511 lzma_coder *coder = coder_ptr;
513 if (coder->lz.options_update == NULL)
516 return_if_error(coder->lz.options_update(
517 coder->lz.coder, reversed_filters));
520 &coder->next, allocator, reversed_filters + 1);
537 lzma_coder *coder = next->coder;
538 if (coder == NULL) {
539 coder = lzma_alloc(sizeof(lzma_coder), allocator);
540 if (coder == NULL)
543 next->coder = coder;
548 coder->lz.coder = NULL;
549 coder->lz.code = NULL;
550 coder->lz.end = NULL;
555 coder->mf.buffer = NULL;
556 coder->mf.size = 0;
557 coder->mf.hash = NULL;
558 coder->mf.son = NULL;
559 coder->mf.hash_count = 0;
560 coder->mf.sons_count = 0;
562 coder->next = LZMA_NEXT_CODER_INIT;
567 return_if_error(lz_init(&coder->lz, allocator,
570 // Setup the size information into coder->mf and deallocate
572 if (lz_encoder_prepare(&coder->mf, allocator, &lz_options))
577 if (lz_encoder_init(&coder->mf, allocator, &lz_options))
581 return lzma_next_filter_init(&coder->next, allocator, filters + 1);