Lines Matching refs:coder

54 lz_decoder_reset(lzma_coder *coder)
56 coder->dict.pos = 2 * LZ_DICT_REPEAT_MAX;
57 coder->dict.full = 0;
58 coder->dict.buf[2 * LZ_DICT_REPEAT_MAX - 1] = '\0';
59 coder->dict.has_wrapped = false;
60 coder->dict.need_reset = false;
66 decode_buffer(lzma_coder *coder,
73 if (coder->dict.pos == coder->dict.size) {
75 coder->dict.pos = LZ_DICT_REPEAT_MAX;
76 coder->dict.has_wrapped = true;
77 memcpy(coder->dict.buf, coder->dict.buf
78 + coder->dict.size
85 const size_t dict_start = coder->dict.pos;
87 // Calculate how much we allow coder->lz.code() to decode.
91 coder->dict.limit = coder->dict.pos
93 coder->dict.size - coder->dict.pos);
95 // Call the coder->lz.code() to do the actual decoding.
96 const lzma_ret ret = coder->lz.code(
97 coder->lz.coder, &coder->dict,
105 const size_t copy_size = coder->dict.pos - dict_start;
109 memcpy(out + *out_pos, coder->dict.buf + dict_start,
114 // Reset the dictionary if so requested by coder->lz.code().
115 if (coder->dict.need_reset) {
116 lz_decoder_reset(coder);
133 || coder->dict.pos < coder->dict.size)
147 lzma_coder *coder = coder_ptr;
149 if (coder->next.code == NULL)
150 return decode_buffer(coder, in, in_pos, in_size,
153 // We aren't the last coder in the chain, we need to decode
157 if (!coder->next_finished
158 && coder->temp.pos == coder->temp.size) {
159 coder->temp.pos = 0;
160 coder->temp.size = 0;
162 const lzma_ret ret = coder->next.code(
163 coder->next.coder,
165 coder->temp.buffer, &coder->temp.size,
169 coder->next_finished = true;
170 else if (ret != LZMA_OK || coder->temp.size == 0)
174 if (coder->this_finished) {
175 if (coder->temp.size != 0)
178 if (coder->next_finished)
184 const lzma_ret ret = decode_buffer(coder, coder->temp.buffer,
185 &coder->temp.pos, coder->temp.size,
189 coder->this_finished = true;
192 else if (coder->next_finished && *out_pos < out_size)
203 lzma_coder *coder = coder_ptr;
205 lzma_next_end(&coder->next, allocator);
206 lzma_free(coder->dict.buf, allocator);
208 if (coder->lz.end != NULL)
209 coder->lz.end(coder->lz.coder, allocator);
211 lzma_free(coder->lz.coder, allocator);
213 lzma_free(coder, allocator);
227 lzma_coder *coder = next->coder;
228 if (coder == NULL) {
229 coder = lzma_alloc(sizeof(lzma_coder), allocator);
230 if (coder == NULL)
233 next->coder = coder;
237 coder->dict.buf = NULL;
238 coder->dict.size = 0;
239 coder->lz = LZMA_LZ_DECODER_INIT;
240 coder->next = LZMA_NEXT_CODER_INIT;
246 return_if_error(lz_init(&coder->lz, allocator,
278 if (coder->dict.size != alloc_size) {
279 lzma_free(coder->dict.buf, allocator);
280 coder->dict.buf = lzma_alloc(alloc_size, allocator);
281 if (coder->dict.buf == NULL)
285 // coder->dict.full is updated will take care that we will
287 coder->dict.size = alloc_size;
290 lz_decoder_reset(next->coder);
300 memcpy(coder->dict.buf + coder->dict.pos,
305 coder->dict.pos += copy_size;
306 coder->dict.full = copy_size;
310 coder->next_finished = false;
311 coder->this_finished = false;
312 coder->temp.pos = 0;
313 coder->temp.size = 0;
316 return lzma_next_filter_init(&coder->next, allocator, filters + 1);