14#ifndef LZMA_LZ_DECODER_H
15#define LZMA_LZ_DECODER_H
63 void (*reset)(
void *coder,
const void *
options);
76#define LZMA_LZ_DECODER_INIT \
81 .set_uncompressed = NULL, \
103dict_get(
const lzma_dict *
const dict,
const uint32_t distance)
105 return dict->buf[
dict->pos - distance - 1
106 + (distance <
dict->pos ? 0 :
dict->size)];
114 return dict->full == 0;
120dict_is_distance_valid(
const lzma_dict *
const dict,
const size_t distance)
122 return dict->full > distance;
131 const size_t dict_avail =
dict->limit -
dict->pos;
138 if (distance <
left) {
144 }
while (--
left > 0);
146 }
else if (distance < dict->pos) {
149 dict->buf +
dict->pos - distance - 1,
158 const uint32_t copy_pos
159 =
dict->pos - distance - 1 +
dict->size;
160 uint32_t copy_size =
dict->size - copy_pos;
162 if (copy_size <
left) {
165 dict->pos += copy_size;
166 copy_size =
left - copy_size;
168 dict->pos += copy_size;
203dict_write(
lzma_dict *restrict
dict,
const uint8_t *restrict in,
205 size_t *restrict
left)
230 dict->need_reset =
true;
#define assert(condition)
Definition lz4.c:273
#define unlikely(expr)
Definition lz4.c:180
Custom functions for memory handling.
Definition base.h:372
Definition lz_decoder.h:20
size_t full
Definition lz_decoder.h:33
bool need_reset
True when dictionary should be reset before decoding more data.
Definition lz_decoder.h:42
size_t pos
Definition lz_decoder.h:28
size_t size
Size of the dictionary.
Definition lz_decoder.h:39
uint8_t * buf
Pointer to the dictionary buffer.
Definition lz_decoder.h:24
size_t limit
Write limit.
Definition lz_decoder.h:36
Definition lz_decoder.h:54
void * coder
Data specific to the LZ-based decoder.
Definition lz_decoder.h:56
Definition lz_decoder.h:47
size_t dict_size
Size of the history buffer.
Definition lz_decoder.h:48
size_t preset_dict_size
Definition lz_decoder.h:50
const uint8_t * preset_dict
TODO: Comment.
Definition lz_decoder.h:49
Hold data and function pointers of the next filter in the chain.
Definition common.h:195
size_t * left
Definition util.h:104
lzma_ret
Return values used by several functions in liblzma.
Definition base.h:57
const lzma_allocator const uint8_t size_t * in_pos
Definition block.h:579
const lzma_allocator const uint8_t size_t in_size
Definition block.h:527
const lzma_allocator const uint8_t * in
Definition block.h:527
const lzma_allocator * allocator
Definition block.h:377
const lzma_filter * filters
Definition container.h:315
uint64_t lzma_vli
Variable-length integer type.
Definition vli.h:63
#define my_min(x, y)
Definition sysdefs.h:185
const lzma_options_lzma * options
Definition container.h:545
size_t lzma_bufcpy(const uint8_t *restrict in, size_t *restrict in_pos, size_t in_size, uint8_t *restrict out, size_t *restrict out_pos, size_t out_size)
Definition common.c:94
static uint32_t const uint8_t uint32_t len
Definition memcmplen.h:44
uint64_t lzma_lz_decoder_memusage(size_t dictionary_size)
Definition lz_decoder.c:301
lzma_ret lzma_lz_decoder_init(lzma_next_coder *next, const lzma_allocator *allocator, const lzma_filter_info *filters, lzma_ret(*lz_init)(lzma_lz_decoder *lz, const lzma_allocator *allocator, lzma_vli id, const void *options, lzma_lz_options *lz_options))
Definition lz_decoder.c:212
uint64_t uncompressed_size
Definition list.c:209
const void * dict
Definition zbuff.h:76