use rand_mt::Mt;
pub struct ZobristKeys {
keys: Vec<u64>,
}
impl ZobristKeys {
pub fn new(problem_size: usize, seed: u64) -> Self {
let mut rng = Mt::new(seed as u32);
let keys = (0..problem_size)
.map(|_| {
let high = (rng.next_u32() as u64) << 32;
let low = rng.next_u32() as u64;
high | low
})
.collect();
Self { keys }
}
#[inline(always)]
pub fn get(&self, index: usize) -> u64 {
self.keys[index]
}
#[inline(always)]
pub fn len(&self) -> usize {
self.keys.len()
}
#[inline(always)]
pub fn is_empty(&self) -> bool {
self.keys.is_empty()
}
}