diff --git a/board/src/bitboard/library.rs b/board/src/bitboard/library.rs index 5e78c5a..95a4bf2 100644 --- a/board/src/bitboard/library.rs +++ b/board/src/bitboard/library.rs @@ -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