Iterate on Squares when building the BitBoard library
This commit is contained in:
parent
ff839db041
commit
5a7e498d5d
1 changed files with 20 additions and 22 deletions
|
@ -83,7 +83,7 @@ impl DiagonalRays {
|
|||
macro_rules! library_getter {
|
||||
($name:ident) => {
|
||||
pub(super) fn $name(&self, sq: Square) -> BitBoard {
|
||||
self.$name[sq.index() as usize]
|
||||
self.$name[sq as usize]
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -91,8 +91,8 @@ macro_rules! library_getter {
|
|||
#[derive(Debug)]
|
||||
pub(super) struct MoveLibrary {
|
||||
// Rays
|
||||
diagonal_rays: [DiagonalRays; 64],
|
||||
orthogonal_rays: [OrthogonalRays; 64],
|
||||
diagonal_rays: [DiagonalRays; Square::NUM as usize],
|
||||
orthogonal_rays: [OrthogonalRays; Square::NUM as usize],
|
||||
|
||||
// Piecewise move tables
|
||||
knight_moves: [BitBoard; 64],
|
||||
|
@ -116,33 +116,31 @@ impl MoveLibrary {
|
|||
}
|
||||
|
||||
fn init(&mut self) {
|
||||
for i in 0..64 {
|
||||
self.init_orthogonal_rays(i);
|
||||
self.init_diagonal_rays(i);
|
||||
self.init_knight_moves(i as usize);
|
||||
self.init_bishop_moves(i as usize);
|
||||
self.init_rook_moves(i as usize);
|
||||
self.init_queen_moves(i as usize);
|
||||
self.init_king_moves(i as usize);
|
||||
for sq in Square::ALL {
|
||||
self.init_orthogonal_rays(sq);
|
||||
self.init_diagonal_rays(sq);
|
||||
self.init_knight_moves(sq as usize);
|
||||
self.init_bishop_moves(sq as usize);
|
||||
self.init_rook_moves(sq as usize);
|
||||
self.init_queen_moves(sq as usize);
|
||||
self.init_king_moves(sq as usize);
|
||||
}
|
||||
}
|
||||
|
||||
fn init_orthogonal_rays(&mut self, idx: u8) {
|
||||
let sq = Square::from_index_unsafe(idx);
|
||||
let sq_bb = BitBoard::from_square(sq);
|
||||
fn init_orthogonal_rays(&mut self, sq: Square) {
|
||||
let sq_bb: BitBoard = sq.into();
|
||||
|
||||
let ortho_rays = &mut self.orthogonal_rays[idx as usize];
|
||||
let ortho_rays = &mut self.orthogonal_rays[sq as usize];
|
||||
ortho_rays.positive_file = Self::generate_ray(sq_bb, BitBoard::shift_north_one);
|
||||
ortho_rays.negative_file = Self::generate_ray(sq_bb, BitBoard::shift_south_one);
|
||||
ortho_rays.positive_rank = Self::generate_ray(sq_bb, BitBoard::shift_east_one);
|
||||
ortho_rays.negative_rank = Self::generate_ray(sq_bb, BitBoard::shift_west_one);
|
||||
}
|
||||
|
||||
fn init_diagonal_rays(&mut self, idx: u8) {
|
||||
let sq = Square::from_index_unsafe(idx);
|
||||
let sq_bb = BitBoard::from_square(sq);
|
||||
fn init_diagonal_rays(&mut self, sq: Square) {
|
||||
let sq_bb: BitBoard = sq.into();
|
||||
|
||||
let diag_rays = &mut self.diagonal_rays[idx as usize];
|
||||
let diag_rays = &mut self.diagonal_rays[sq as usize];
|
||||
diag_rays.positive_diagonal = Self::generate_ray(sq_bb, BitBoard::shift_north_east_one);
|
||||
diag_rays.positive_antidiagonal = Self::generate_ray(sq_bb, BitBoard::shift_north_west_one);
|
||||
diag_rays.negative_diagonal = Self::generate_ray(sq_bb, BitBoard::shift_south_west_one);
|
||||
|
@ -204,13 +202,13 @@ impl MoveLibrary {
|
|||
}
|
||||
|
||||
#[inline]
|
||||
fn generate_ray(sq: BitBoard, shift: fn(&BitBoard) -> BitBoard) -> BitBoard {
|
||||
fn generate_ray(sq: BitBoard, shift: fn(BitBoard) -> BitBoard) -> BitBoard {
|
||||
let mut ray = BitBoard::empty();
|
||||
|
||||
let mut iter = shift(&sq);
|
||||
let mut iter = shift(sq);
|
||||
while !iter.is_empty() {
|
||||
ray |= iter;
|
||||
iter = shift(&iter);
|
||||
iter = shift(iter);
|
||||
}
|
||||
|
||||
ray
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue