From cae93cb090349f7c6232ce96d04c78d3c68cbe2a Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Mon, 2 Jun 2025 15:54:00 -0700 Subject: [PATCH] [board, position] Return replaced piece when placing a piece with PlacePieceStrategy::Replace When place_piece() is called with PlacePieceStrategy::Replace, return the replaced piece in the Ok() variant of the Result as an Option. Plumb this new return type through Board and Position. --- board/src/board.rs | 2 +- board/src/piece_sets.rs | 8 +++++--- position/src/position.rs | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/board/src/board.rs b/board/src/board.rs index 3e866e0..63c0ad5 100644 --- a/board/src/board.rs +++ b/board/src/board.rs @@ -80,7 +80,7 @@ impl Board { piece: Piece, square: Square, strategy: PlacePieceStrategy, - ) -> Result<(), PlacePieceError> { + ) -> Result, PlacePieceError> { self.pieces.place(piece, square, strategy) } diff --git a/board/src/piece_sets.rs b/board/src/piece_sets.rs index b6de5c8..bb6d712 100644 --- a/board/src/piece_sets.rs +++ b/board/src/piece_sets.rs @@ -106,9 +106,11 @@ impl PieceSet { piece: Piece, square: Square, strategy: PlacePieceStrategy, - ) -> Result<(), PlacePieceError> { + ) -> Result, PlacePieceError> { + let existing_piece = self.mailbox.get(square); + if strategy == PlacePieceStrategy::PreserveExisting { - if let Some(piece) = self.mailbox.get(square) { + if let Some(piece) = existing_piece { return Err(PlacePieceError::ExisitingPiece { piece, square }); } } @@ -120,7 +122,7 @@ impl PieceSet { self.shape_occupancy[shape as usize].set(square); self.mailbox.set(piece, square); - Ok(()) + Ok(existing_piece) } pub(crate) fn remove(&mut self, square: Square) -> Option { diff --git a/position/src/position.rs b/position/src/position.rs index 4839095..8b08bce 100644 --- a/position/src/position.rs +++ b/position/src/position.rs @@ -59,7 +59,7 @@ impl Position { piece: Piece, square: Square, strategy: PlacePieceStrategy, - ) -> Result<(), PlacePieceError> { + ) -> Result, PlacePieceError> { self.board.place_piece(piece, square, strategy) }