use std::collections::HashSet;
use crate::{Board, BinBoard, SimilarSituations};
pub trait UsedSituations<T: Board> {
fn is(&self, board: &T) -> bool;
fn add(&mut self, board: &T);
fn remove(&mut self, board: &T);
}
#[derive(Debug, Clone, Eq, PartialEq)]
pub struct HashUsedSituations {
set: HashSet<BinBoard>,
}
impl HashUsedSituations {
pub fn new() -> Self {
Self {
set: HashSet::new(),
}
}
}
impl<T: Board> UsedSituations<T> for HashUsedSituations {
fn is(&self, board: &T) -> bool {
self.set.contains(&SimilarSituations::new(board).min().unwrap())
}
fn add(&mut self, board: &T) {
self.set.insert(SimilarSituations::new(board).min().unwrap());
}
fn remove(&mut self, board: &T) {
self.set.remove(&SimilarSituations::new(board).min().unwrap());
}
}