[board] Implement Position::occupied_squares and Position::empty_squares

These methods return bitboards marking the occupied and empty squares, made by ORing the two pieces_per_color bitboards.
This commit is contained in:
Eryn Wells 2023-12-29 08:31:58 -08:00
parent 2296be23cc
commit 1a986e4c27

View file

@ -93,6 +93,17 @@ impl Position {
Ok(())
}
/// Return a BitBoard representing the set of squares containing a piece.
pub(crate) fn occupied_squares(&self) -> BitBoard {
self.pieces_per_color[Color::White as usize] | self.pieces_per_color[Color::Black as usize]
}
/// Return a BitBoard representing the set of squares containing a piece. This set is the inverse of `occupied_squares`.
pub(crate) fn empty_squares(&self) -> BitBoard {
!(self.pieces_per_color[Color::White as usize]
| self.pieces_per_color[Color::Black as usize])
}
pub(crate) fn bitboard_for_piece(&self, piece: Piece) -> &BitBoard {
&self.pieces_per_type[piece.color as usize][piece.shape as usize]
}
@ -101,11 +112,11 @@ impl Position {
&mut self.pieces_per_type[piece.color as usize][piece.shape as usize]
}
pub(self) fn bitboard_for_color(&self, color: Color) -> &BitBoard {
pub(crate) fn bitboard_for_color(&self, color: Color) -> &BitBoard {
&self.pieces_per_color[color as usize]
}
pub(self) fn bitboard_for_color_mut(&mut self, color: Color) -> &mut BitBoard {
fn bitboard_for_color_mut(&mut self, color: Color) -> &mut BitBoard {
&mut self.pieces_per_color[color as usize]
}