Add 'Magic' type

This commit is contained in:
Bruno BELANYI 2022-07-22 10:14:46 +02:00
parent d3a84750f5
commit 2601abdc76
2 changed files with 27 additions and 0 deletions

23
src/movegen/magic/mod.rs Normal file
View file

@ -0,0 +1,23 @@
use crate::board::Bitboard;
/// A type representing the magic board indexing a given [crate::board::Square].
pub struct Magic {
/// Magic number.
magic: u64,
/// Base offset into the magic square table.
offset: usize,
/// Mask to apply to the blocker board before applying the magic.
mask: Bitboard,
/// Length of the resulting mask after applying the magic.
shift: u8,
}
impl Magic {
/// Compute the index into the magics database for this set of `blockers`.
#[allow(unused)] // FIXME: remove once used
pub fn get_index(&self, blockers: Bitboard) -> usize {
let relevant_occupancy = (blockers & self.mask).0;
let base_index = ((relevant_occupancy.wrapping_mul(self.magic)) >> self.shift) as usize;
base_index + self.offset
}
}

View file

@ -1,3 +1,7 @@
// Magic bitboard
pub mod magic;
pub use magic::*;
// Move generation implementation details // Move generation implementation details
mod bishop; mod bishop;
mod king; mod king;