--- /dev/null
+/*
+ * lcpit_matchfinder.h
+ *
+ * A match-finder for Lempel-Ziv compression based on bottom-up construction and
+ * traversal of the Longest Common Prefix (LCP) interval tree.
+ *
+ * Author: Eric Biggers
+ * Year: 2014, 2015
+ *
+ * The author dedicates this file to the public domain.
+ * You can do whatever you want with this file.
+ */
+
+#ifndef _LCPIT_MATCHFINDER_H
+#define _LCPIT_MATCHFINDER_H
+
+#include "wimlib/types.h"
+
+struct lcpit_matchfinder {
+
+ bool huge_mode;
+
+ u32 cur_pos;
+
+ /* Mapping: suffix index ("window position") => lcp-interval index */
+ u32 *pos_data;
+
+ /* Mapping: lcp-interval index => lcp-interval data
+ *
+ * Initially, the lcp-interval data for an lcp-interval contains that
+ * interval's lcp and superinterval index.
+ *
+ * After a lcp-interval is visited during match-finding, its
+ * lcp-interval data contains that interval's lcp and the position of
+ * the next suffix to consider as a match when matching against that
+ * lcp-interval. */
+ union {
+ u32 *intervals;
+ u64 *intervals64;
+ };
+
+ /* The suffix array */
+ u32 *SA;
+
+ u32 min_match_len;
+ u32 nice_match_len;
+};
+
+struct lz_match {
+ u32 length;
+ u32 offset;
+};
+
+extern u64
+lcpit_matchfinder_get_needed_memory(size_t max_bufsize);
+
+extern bool
+lcpit_matchfinder_init(struct lcpit_matchfinder *mf, size_t max_bufsize,
+ u32 min_match_len, u32 nice_match_len);
+
+extern void
+lcpit_matchfinder_destroy(struct lcpit_matchfinder *mf);
+
+extern void
+lcpit_matchfinder_load_buffer(struct lcpit_matchfinder *mf, const u8 *T, u32 n);
+
+extern u32
+lcpit_matchfinder_get_matches(struct lcpit_matchfinder *mf,
+ struct lz_match *matches);
+
+extern void
+lcpit_matchfinder_skip_bytes(struct lcpit_matchfinder *mf, u32 count);
+
+#endif /* _LCPIT_MATCHFINDER_H */