use super::history::StatsEntry;
pub const TT_MOVE_HISTORY_MULTI_CUT_BASE: i32 = -400;
pub const TT_MOVE_HISTORY_MULTI_CUT_DEPTH_MULT: i32 = -100;
pub const TT_MOVE_HISTORY_MULTI_CUT_MIN: i32 = -4000;
pub struct TTMoveHistory {
entry: StatsEntry<8192>,
}
impl TTMoveHistory {
pub fn new() -> Self {
Self {
entry: StatsEntry::default(),
}
}
#[inline]
pub fn get(&self) -> i16 {
self.entry.get()
}
#[inline]
pub fn update(&mut self, bonus: i32) {
self.entry.update(bonus);
}
#[inline]
pub fn multi_cut_bonus(depth: i32) -> i32 {
(TT_MOVE_HISTORY_MULTI_CUT_BASE + TT_MOVE_HISTORY_MULTI_CUT_DEPTH_MULT * depth)
.max(TT_MOVE_HISTORY_MULTI_CUT_MIN)
}
pub fn clear(&mut self) {
self.entry.set(0);
}
}
impl Default for TTMoveHistory {
fn default() -> Self {
Self::new()
}
}