From bf2bccbc7d0fe3dee3c16753fa5373670b65285f Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Mon, 22 Jan 2024 08:12:55 -0800 Subject: [PATCH] [board] Implement PositionBuilder::from_position Create a PositionBuilder from a Position. --- .../src/position/builders/position_builder.rs | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/board/src/position/builders/position_builder.rs b/board/src/position/builders/position_builder.rs index 1d8c3fb..7c68413 100644 --- a/board/src/position/builders/position_builder.rs +++ b/board/src/position/builders/position_builder.rs @@ -25,6 +25,27 @@ impl Builder { Self::default() } + pub fn from_position(position: &Position) -> Self { + let pieces = BTreeMap::from_iter( + position + .pieces(Color::White) + .chain(position.pieces(Color::Black)) + .map(|placed_piece| (placed_piece.square(), *placed_piece.piece())), + ); + + let white_king = position.king_square(Color::White); + let black_king = position.king_square(Color::Black); + + Self { + player_to_move: position.player_to_move(), + flags: position.flags(), + pieces, + kings: [white_king, black_king], + ply_counter: position.ply_counter(), + move_number: position.move_number(), + } + } + pub fn to_move(&mut self, player: Color) -> &mut Self { self.player_to_move = player; self