use super::accumulator::{DirtyPiece, IndexList, MAX_CHANGED_FEATURES};
use super::features::{FeatureSet, HalfKPFeatureSet};
use crate::position::Position;
use crate::types::Color;
pub type ChangedFeatures = (IndexList<MAX_CHANGED_FEATURES>, IndexList<MAX_CHANGED_FEATURES>);
pub fn get_changed_features(
pos: &Position,
dirty_piece: &DirtyPiece,
perspective: Color,
) -> ChangedFeatures {
if pos.previous_state().is_none() {
return (IndexList::new(), IndexList::new());
}
if HalfKPFeatureSet::needs_refresh(dirty_piece, perspective) {
return (IndexList::new(), IndexList::new());
}
let raw_king_sq = pos.king_square(perspective);
let king_sq = if perspective == Color::Black {
raw_king_sq
} else {
raw_king_sq.inverse()
};
HalfKPFeatureSet::collect_changed_indices(dirty_piece, perspective, king_sq)
}
#[inline]
pub fn get_features_from_dirty_piece(
dirty_piece: &DirtyPiece,
perspective: Color,
king_sq: crate::types::Square,
) -> ChangedFeatures {
HalfKPFeatureSet::collect_changed_indices(dirty_piece, perspective, king_sq)
}