/*
* lcpit_matchfinder.c
*
+ * A match-finder for Lempel-Ziv compression based on bottom-up construction and
+ * traversal of the Longest Common Prefix (LCP) interval tree.
+ *
* The following copying information applies to this specific source code file:
*
* Written in 2014-2015 by Eric Biggers <ebiggers3@gmail.com>
* around by just continuing until we get to a link that actually takes us
* higher in the tree. This can be described as a lazy-update scheme.
*/
-static inline u32
+static forceinline u32
lcpit_advance_one_byte(const u32 cur_pos,
u32 pos_data[restrict],
u32 intervals[restrict],
/* Like lcpit_advance_one_byte(), but for buffers larger than
* MAX_NORMAL_BUFSIZE. */
-static inline u32
+static forceinline u32
lcpit_advance_one_byte_huge(const u32 cur_pos,
u32 pos_data[restrict],
u64 intervals64[restrict],
return matchptr - matches;
}
-static inline u64
+static forceinline u64
get_pos_data_size(size_t max_bufsize)
{
return (u64)max((u64)max_bufsize + PREFETCH_SAFETY,
DIVSUFSORT_TMP_LEN) * sizeof(u32);
}
-static inline u64
+static forceinline u64
get_intervals_size(size_t max_bufsize)
{
return ((u64)max_bufsize + PREFETCH_SAFETY) *
}
mf->min_match_len = min_match_len;
- mf->nice_match_len = min(nice_match_len,
- (max_bufsize <= MAX_NORMAL_BUFSIZE) ?
- LCP_MAX : HUGE_LCP_MAX);
+ mf->orig_nice_match_len = nice_match_len;
return true;
}
* References:
*
* Y. Mori. libdivsufsort, a lightweight suffix-sorting library.
- * https://code.google.com/p/libdivsufsort/.
+ * https://github.com/y-256/libdivsufsort
*
* G. Nong, S. Zhang, and W.H. Chan. 2009. Linear Suffix Array
* Construction by Almost Pure Induced-Sorting. Data Compression
build_SA(mf->intervals, T, n, mf->pos_data);
build_ISA(mf->pos_data, mf->intervals, n);
if (n <= MAX_NORMAL_BUFSIZE) {
+ mf->nice_match_len = min(mf->orig_nice_match_len, LCP_MAX);
for (u32 i = 0; i < PREFETCH_SAFETY; i++) {
mf->intervals[n + i] = 0;
mf->pos_data[n + i] = 0;
build_LCPIT(mf->intervals, mf->pos_data, n);
mf->huge_mode = false;
} else {
+ mf->nice_match_len = min(mf->orig_nice_match_len, HUGE_LCP_MAX);
for (u32 i = 0; i < PREFETCH_SAFETY; i++) {
mf->intervals64[n + i] = 0;
mf->pos_data[n + i] = 0;