X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=include%2Fwimlib%2Flzms.h;h=e517073485179137e93d854bd300a91766916800;hp=177ad548606b91daeb64fc6b85b507905fa121c8;hb=027518fa61bd9232ff7fa7ecd270546d920c912f;hpb=dbfee435692344cccd48bb4c7deb3af23ac80176 diff --git a/include/wimlib/lzms.h b/include/wimlib/lzms.h index 177ad548..e5170734 100644 --- a/include/wimlib/lzms.h +++ b/include/wimlib/lzms.h @@ -68,6 +68,39 @@ struct lzms_probability_entry { u64 recent_bits; }; +/* LRU queues for LZ matches. */ +struct lzms_lz_lru_queues { + + /* Recent LZ match offsets */ + u32 recent_offsets[LZMS_NUM_RECENT_OFFSETS + 1]; + + /* These variables are used to delay updates to the LRU queues by one + * decoded item. */ + u32 prev_offset; + u32 upcoming_offset; +}; + +/* LRU queues for delta matches. */ +struct lzms_delta_lru_queues { + + /* Recent delta match powers and offsets */ + u32 recent_powers[LZMS_NUM_RECENT_OFFSETS + 1]; + u32 recent_offsets[LZMS_NUM_RECENT_OFFSETS + 1]; + + /* These variables are used to delay updates to the LRU queues by one + * decoded item. */ + u32 prev_power; + u32 prev_offset; + u32 upcoming_power; + u32 upcoming_offset; +}; + +/* LRU (least-recently-used) queues for match information. */ +struct lzms_lru_queues { + struct lzms_lz_lru_queues lz; + struct lzms_delta_lru_queues delta; +}; + extern u32 lzms_position_slot_base[LZMS_MAX_NUM_OFFSET_SYMS + 1]; extern u32 lzms_length_slot_base[LZMS_NUM_LEN_SYMS + 1]; @@ -92,4 +125,10 @@ lzms_get_length_slot(u32 value) LZMS_NUM_LEN_SYMS); } +extern void +lzms_init_lru_queues(struct lzms_lru_queues *lru); + +extern void +lzms_update_lru_queues(struct lzms_lru_queues *lru); + #endif /* _WIMLIB_LZMS_H */