[board] Update a bunch of methods to take &Piece instead of plain Piece

This commit is contained in:
Eryn Wells 2024-01-21 09:18:16 -08:00
parent f7951d6110
commit 1a907844d6
8 changed files with 20 additions and 16 deletions

View file

@ -48,7 +48,7 @@ impl<'pos> MoveGeneratorInternal for ClassicalMoveGenerator<'pos> {
let quiet_moves_bb = all_moves & (empty_squares | !friendly_pieces);
let capture_moves_bb = all_moves & opposing_pieces;
let map_to_move = |sq| MoveBuilder::new(piece, square, sq).build();
let map_to_move = |sq| MoveBuilder::new(*piece, square, sq).build();
let quiet_moves = quiet_moves_bb.occupied_squares().map(map_to_move);
let capture_moves = capture_moves_bb.occupied_squares().map(map_to_move);

View file

@ -56,7 +56,7 @@ impl<'pos> MoveGeneratorInternal for KingMoveGenerator<'pos> {
// TODO: Handle checks. Prevent moving a king to a square attacked by a
// piece of the opposite color.
let map_to_move = |sq| MoveBuilder::new(piece, square, sq).build();
let map_to_move = |sq| MoveBuilder::new(*piece, square, sq).build();
let king_side_castle = Self::king_side_castle(position, color);
let queen_side_castle = Self::queen_side_castle(position, color);

View file

@ -22,11 +22,11 @@ impl<'pos> MoveGeneratorInternal for KnightMoveGenerator<'pos> {
let capture_moves_bb = knight_moves & opposing_pieces;
let quiet_moves = quiet_moves_bb.occupied_squares().map(|to_sq| {
MoveBuilder::new(placed_piece.piece(), placed_piece.square(), to_sq).build()
MoveBuilder::new(*placed_piece.piece(), placed_piece.square(), to_sq).build()
});
let capture_moves = capture_moves_bb.occupied_squares().map(|to_sq| {
let captured_piece = position.piece_on_square(to_sq).unwrap();
MoveBuilder::new(placed_piece.piece(), placed_piece.square(), to_sq)
MoveBuilder::new(*placed_piece.piece(), placed_piece.square(), to_sq)
.capturing(captured_piece)
.build()
});

View file

@ -53,7 +53,7 @@ impl<'pos> MoveGeneratorInternal for ClassicalMoveGenerator<'pos> {
let quiet_moves_bb = all_moves & (empty_squares | !friendly_pieces);
let capture_moves_bb = all_moves & opposing_pieces;
let map_to_move = |sq| MoveBuilder::new(piece, square, sq).build();
let map_to_move = |sq| MoveBuilder::new(*piece, square, sq).build();
let quiet_moves = quiet_moves_bb.occupied_squares().map(map_to_move);
let capture_moves = capture_moves_bb.occupied_squares().map(map_to_move);

View file

@ -49,7 +49,7 @@ impl<'pos> MoveGeneratorInternal for ClassicalMoveGenerator<'pos> {
let quiet_moves_bb = all_moves & (empty_squares | !friendly_pieces);
let capture_moves_bb = all_moves & opposing_pieces;
let map_to_move = |sq| MoveBuilder::new(piece, square, sq).build();
let map_to_move = |sq| MoveBuilder::new(*piece, square, sq).build();
let quiet_moves = quiet_moves_bb.occupied_squares().map(map_to_move);
let capture_moves = capture_moves_bb.occupied_squares().map(map_to_move);

View file

@ -244,8 +244,8 @@ impl PlacedPiece {
}
#[inline]
pub fn piece(&self) -> Piece {
self.piece
pub fn piece(&self) -> &Piece {
&self.piece
}
#[inline]

View file

@ -66,11 +66,11 @@ impl PieceBitBoards {
self.by_color.bitboard_mut(color)
}
pub(super) fn bitboard_for_piece(&self, piece: Piece) -> &BitBoard {
pub(super) fn bitboard_for_piece(&self, piece: &Piece) -> &BitBoard {
self.by_color_and_shape.bitboard_for_piece(piece)
}
pub(super) fn bitboard_for_piece_mut(&mut self, piece: Piece) -> &mut BitBoard {
pub(super) fn bitboard_for_piece_mut(&mut self, piece: &Piece) -> &mut BitBoard {
self.by_color_and_shape.bitboard_for_piece_mut(piece)
}
@ -135,15 +135,15 @@ impl ByColor {
}
impl ByColorAndShape {
fn bitboard_for_piece(&self, piece: Piece) -> &BitBoard {
fn bitboard_for_piece(&self, piece: &Piece) -> &BitBoard {
&self.0[piece.color() as usize][piece.shape() as usize]
}
fn bitboard_for_piece_mut(&mut self, piece: Piece) -> &mut BitBoard {
fn bitboard_for_piece_mut(&mut self, piece: &Piece) -> &mut BitBoard {
&mut self.0[piece.color() as usize][piece.shape() as usize]
}
fn set_square(&mut self, square: Square, piece: Piece) {
fn set_square(&mut self, square: Square, piece: &Piece) {
self.bitboard_for_piece_mut(piece).set_square(square);
}
}

View file

@ -144,7 +144,7 @@ impl Position {
for color in Color::iter() {
for shape in Shape::iter() {
let piece = Piece::new(color, *shape);
if self.pieces.bitboard_for_piece(piece).is_set(sq) {
if self.pieces.bitboard_for_piece(&piece).is_set(sq) {
return Some(PlacedPiece::new(piece, sq));
}
}
@ -176,7 +176,7 @@ impl Position {
fn king_square(&self) -> Square {
self.pieces
.bitboard_for_piece(Piece::king(self.color_to_move))
.bitboard_for_piece(&Piece::king(self.color_to_move))
.occupied_squares()
.next()
.unwrap()
@ -207,6 +207,10 @@ impl Position {
pub(super) fn flags(&self) -> Flags {
self.flags
}
pub(super) fn piece_bitboards(&self) -> &PieceBitBoards {
&self.pieces
}
}
// crate methods
@ -216,7 +220,7 @@ impl Position {
}
pub(crate) fn bitboard_for_piece(&self, piece: Piece) -> &BitBoard {
self.pieces.bitboard_for_piece(piece)
self.pieces.bitboard_for_piece(&piece)
}
}