use alloc::vec::Vec;
use super::super::cost_model::HcOptimalCostProfile;
#[derive(Copy, Clone, Debug)]
pub(crate) struct MatchCandidate {
pub(crate) start: usize,
pub(crate) offset: usize,
pub(crate) match_len: usize,
}
#[derive(Copy, Clone, Debug)]
pub(crate) struct HcOptimalNode {
pub(crate) price: u32,
pub(crate) off: u32,
pub(crate) mlen: u32,
pub(crate) litlen: u32,
pub(crate) reps: [u32; 3],
}
impl Default for HcOptimalNode {
fn default() -> Self {
Self {
price: u32::MAX,
off: 0,
mlen: 0,
litlen: u32::MAX,
reps: [1, 4, 8],
}
}
}
#[derive(Copy, Clone)]
pub(crate) struct HcOptimalSequence {
pub(crate) offset: u32,
pub(crate) match_len: u32,
pub(crate) lit_len: u32,
}
#[derive(Copy, Clone)]
pub(crate) struct HcCandidateQuery {
pub(crate) reps: [u32; 3],
pub(crate) lit_len: usize,
pub(crate) ldm_candidate: Option<MatchCandidate>,
}
#[derive(Copy, Clone)]
pub(crate) struct HcOptimalPlanState {
pub(crate) reps: [u32; 3],
pub(crate) litlen: usize,
pub(crate) profile: HcOptimalCostProfile,
}
pub(crate) struct HcOptimalPlanBuffers {
pub(crate) nodes: Vec<HcOptimalNode>,
pub(crate) candidates: Vec<MatchCandidate>,
pub(crate) store: Vec<HcOptimalNode>,
pub(crate) ll_prices: Vec<u32>,
pub(crate) ll_price_generations: Vec<u32>,
pub(crate) ml_prices: Vec<u32>,
pub(crate) ml_price_generations: Vec<u32>,
}