Lines Matching +full:everything +full:- +full:else
1 // SPDX-License-Identifier: 0BSD
25 assert(!coder->end_was_reached); in copy_or_code()
27 if (coder->next.code == NULL) { in copy_or_code()
31 if (coder->is_encoder && action == LZMA_FINISH in copy_or_code()
33 coder->end_was_reached = true; in copy_or_code()
35 } else { in copy_or_code()
37 const lzma_ret ret = coder->next.code( in copy_or_code()
38 coder->next.coder, allocator, in copy_or_code()
43 assert(!coder->is_encoder in copy_or_code()
45 coder->end_was_reached = true; in copy_or_code()
47 } else if (ret != LZMA_OK) { in copy_or_code()
59 const size_t filtered = coder->filter(coder->simple, in call_filter()
60 coder->now_pos, coder->is_encoder, in call_filter()
62 coder->now_pos += filtered; in call_filter()
76 // in cases when the filter is able to filter everything. With most in simple_code()
83 // Flush already filtered data from coder->buffer[] to out[]. in simple_code()
84 if (coder->pos < coder->filtered) { in simple_code()
85 lzma_bufcpy(coder->buffer, &coder->pos, coder->filtered, in simple_code()
90 if (coder->pos < coder->filtered) in simple_code()
93 if (coder->end_was_reached) { in simple_code()
94 assert(coder->filtered == coder->size); in simple_code()
100 coder->filtered = 0; in simple_code()
102 assert(!coder->end_was_reached); in simple_code()
105 // in coder->buffer[], flush coder->buffer[] to out[], and copy/code in simple_code()
109 const size_t out_avail = out_size - *out_pos; in simple_code()
110 const size_t buf_avail = coder->size - coder->pos; in simple_code()
116 // Flush data from coder->buffer[] to out[], but don't reset in simple_code()
117 // coder->pos and coder->size yet. This way the coder can be in simple_code()
123 // with a null-pointer is undefined even if the third in simple_code()
126 memcpy(out + *out_pos, coder->buffer + coder->pos, in simple_code()
144 const size_t size = *out_pos - out_start; in simple_code()
148 const size_t unfiltered = size - filtered; in simple_code()
149 assert(unfiltered <= coder->allocated / 2); in simple_code()
151 // Now we can update coder->pos and coder->size, because in simple_code()
153 coder->pos = 0; in simple_code()
154 coder->size = unfiltered; in simple_code()
156 if (coder->end_was_reached) { in simple_code()
159 coder->size = 0; in simple_code()
161 } else if (unfiltered > 0) { in simple_code()
163 // coder->buffer[] and rewind *out_pos appropriately. in simple_code()
164 *out_pos -= unfiltered; in simple_code()
165 memcpy(coder->buffer, out + *out_pos, unfiltered); in simple_code()
167 } else if (coder->pos > 0) { in simple_code()
168 memmove(coder->buffer, coder->buffer + coder->pos, buf_avail); in simple_code()
169 coder->size -= coder->pos; in simple_code()
170 coder->pos = 0; in simple_code()
173 assert(coder->pos == 0); in simple_code()
175 // If coder->buffer[] isn't empty, try to fill it by copying/decoding in simple_code()
176 // more data. Then filter coder->buffer[] and copy the successfully in simple_code()
178 // unfiltered data will be left to coder->buffer[]. in simple_code()
179 if (coder->size > 0) { in simple_code()
183 coder->buffer, &coder->size, in simple_code()
184 coder->allocated, action); in simple_code()
190 coder->filtered = call_filter( in simple_code()
191 coder, coder->buffer, coder->size); in simple_code()
193 // Everything is considered to be filtered if coder->buffer[] in simple_code()
195 if (coder->end_was_reached) in simple_code()
196 coder->filtered = coder->size; in simple_code()
199 lzma_bufcpy(coder->buffer, &coder->pos, coder->filtered, in simple_code()
203 // Check if we got everything done. in simple_code()
204 if (coder->end_was_reached && coder->pos == coder->size) in simple_code()
215 lzma_next_end(&coder->next, allocator); in simple_coder_end()
216 lzma_free(coder->simple, allocator); in simple_coder_end()
231 &coder->next, allocator, reversed_filters + 1); in simple_coder_update()
244 lzma_simple_coder *coder = next->coder; in lzma_simple_coder_init()
249 // more data in coder->buffer[] if it can be filled completely. in lzma_simple_coder_init()
255 next->coder = coder; in lzma_simple_coder_init()
256 next->code = &simple_code; in lzma_simple_coder_init()
257 next->end = &simple_coder_end; in lzma_simple_coder_init()
258 next->update = &simple_coder_update; in lzma_simple_coder_init()
260 coder->next = LZMA_NEXT_CODER_INIT; in lzma_simple_coder_init()
261 coder->filter = filter; in lzma_simple_coder_init()
262 coder->allocated = 2 * unfiltered_max; in lzma_simple_coder_init()
264 // Allocate memory for filter-specific data structure. in lzma_simple_coder_init()
266 coder->simple = lzma_alloc(simple_size, allocator); in lzma_simple_coder_init()
267 if (coder->simple == NULL) in lzma_simple_coder_init()
269 } else { in lzma_simple_coder_init()
270 coder->simple = NULL; in lzma_simple_coder_init()
276 coder->now_pos = simple->start_offset; in lzma_simple_coder_init()
277 if (coder->now_pos & (alignment - 1)) in lzma_simple_coder_init()
279 } else { in lzma_simple_coder_init()
280 coder->now_pos = 0; in lzma_simple_coder_init()
284 coder->is_encoder = is_encoder; in lzma_simple_coder_init()
285 coder->end_was_reached = false; in lzma_simple_coder_init()
286 coder->pos = 0; in lzma_simple_coder_init()
287 coder->filtered = 0; in lzma_simple_coder_init()
288 coder->size = 0; in lzma_simple_coder_init()
290 return lzma_next_filter_init(&coder->next, allocator, filters + 1); in lzma_simple_coder_init()