Lines Matching refs:dict
1420 struct dictionary dict;
1439 static void dict_reset(struct dictionary *dict)
1441 dict->start = 0;
1442 dict->pos = 0;
1443 dict->limit = 0;
1444 dict->full = 0;
1448 static void dict_limit(struct dictionary *dict, size_t out_max)
1450 if (dict->end - dict->pos <= out_max)
1451 dict->limit = dict->end;
1453 dict->limit = dict->pos + out_max;
1457 static inline int dict_has_space(const struct dictionary *dict)
1459 return dict->pos < dict->limit;
1468 static inline uint32_t dict_get(const struct dictionary *dict, uint32_t dist)
1470 size_t offset = dict->pos - dist - 1;
1472 if (dist >= dict->pos)
1473 offset += dict->end;
1475 return dict->full > 0 ? dict->buf[offset] : 0;
1481 static inline void dict_put(struct dictionary *dict, uint8_t byte)
1483 dict->buf[dict->pos++] = byte;
1485 if (dict->full < dict->pos)
1486 dict->full = dict->pos;
1494 static int dict_repeat(struct dictionary *dict, uint32_t *len, uint32_t dist)
1499 if (dist >= dict->full || dist >= dict->size) return 0;
1501 left = minof(dict->limit - dict->pos, *len);
1504 back = dict->pos - dist - 1;
1505 if (dist >= dict->pos)
1506 back += dict->end;
1509 dict->buf[dict->pos++] = dict->buf[back++];
1510 if (back == dict->end)
1514 if (dict->full < dict->pos)
1515 dict->full = dict->pos;
1521 static void dict_uncompressed(struct dictionary *dict, struct xz_buf *b,
1530 if (copy_size > dict->end - dict->pos)
1531 copy_size = dict->end - dict->pos;
1537 memcpy(dict->buf + dict->pos, b->in + b->in_pos, copy_size);
1538 dict->pos += copy_size;
1540 if (dict->full < dict->pos)
1541 dict->full = dict->pos;
1543 if (dict->pos == dict->end)
1544 dict->pos = 0;
1549 dict->start = dict->pos;
1561 static uint32_t dict_flush(struct dictionary *dict, struct xz_buf *b)
1563 size_t copy_size = dict->pos - dict->start;
1565 if (dict->pos == dict->end)
1566 dict->pos = 0;
1568 memcpy(b->out + b->out_pos, dict->buf + dict->start,
1571 dict->start = dict->pos;
1716 uint32_t prev_byte = dict_get(&s->dict, 0);
1718 uint32_t high = (s->dict.pos & s->lzma.literal_pos_mask) << s->lzma.lc;
1738 match_byte = dict_get(&s->dict, s->lzma.rep0) << 1;
1756 dict_put(&s->dict, (uint8_t)symbol);
1872 if (dict_has_space(&s->dict) && s->lzma.len > 0)
1873 dict_repeat(&s->dict, &s->lzma.len, s->lzma.rep0);
1879 while (dict_has_space(&s->dict) && !rc_limit_exceeded(&s->rc)) {
1880 pos_state = s->dict.pos & s->lzma.pos_mask;
1891 if (!dict_repeat(&s->dict, &s->lzma.len, s->lzma.rep0))
2119 dict_reset(&s->dict);
2207 dict_limit(&s->dict, minof(b->out_size - b->out_pos,
2212 s->lzma2.uncompressed -= dict_flush(&s->dict, b);
2232 dict_uncompressed(&s->dict, b, &s->lzma2.compressed);
2250 s->dict.size_max = dict_max;
2251 s->dict.buf = NULL;
2252 s->dict.allocated = 0;
2263 s->dict.size = 2 + (props & 1);
2264 s->dict.size <<= (props >> 1) + 11;
2266 if (s->dict.size > s->dict.size_max)
2269 s->dict.end = s->dict.size;
2271 if (s->dict.allocated < s->dict.size) {
2272 free(s->dict.buf);
2273 s->dict.buf = malloc(s->dict.size);
2274 if (s->dict.buf == NULL) {
2275 s->dict.allocated = 0;
3128 free((s->lzma2)->dict.buf);