#![allow(dead_code)]
pub(crate) mod generator;
pub(crate) mod optimal;
pub(crate) mod priceset;
use super::cost_model::{HC_FORMAT_MINMATCH, HC_OPT_NUM, HcOptimalCostProfile};
pub(crate) const HC_MIN_MATCH_LEN: usize = 4;
pub(crate) const MAX_HC_SEARCH_DEPTH: usize = 512;
pub(crate) const HC_OPT_CANDIDATE_CAPACITY: usize = MAX_HC_SEARCH_DEPTH + 8;
const _: () = {
use crate::encoding::strategy::{BtOpt, BtUltra, BtUltra2, Btlazy2, Strategy};
assert!(BtOpt::MAX_CHAIN_DEPTH <= MAX_HC_SEARCH_DEPTH);
assert!(BtUltra::MAX_CHAIN_DEPTH <= MAX_HC_SEARCH_DEPTH);
assert!(BtUltra2::MAX_CHAIN_DEPTH <= MAX_HC_SEARCH_DEPTH);
assert!(Btlazy2::MAX_CHAIN_DEPTH <= MAX_HC_SEARCH_DEPTH);
};
#[derive(Clone)]
pub(crate) struct HcMatcher {
pub(crate) search_depth: usize,
pub(crate) target_len: usize,
}
impl HcMatcher {
pub(crate) fn new(search_depth: usize, target_len: usize) -> Self {
Self {
search_depth,
target_len,
}
}
pub(crate) fn sufficient_match_len_for_pass(&self, profile: HcOptimalCostProfile) -> usize {
profile
.sufficient_match_len
.min(self.target_len)
.clamp(HC_FORMAT_MINMATCH, HC_OPT_NUM - 1)
}
}