Remove the move list argument from MoveList::quiet_moves and capture_moves

Produce an iterator of Moves in MoveList::moves
This commit is contained in:
Eryn Wells 2024-01-28 15:43:47 -08:00
parent c558800385
commit d910ff708e

View file

@ -1,10 +1,10 @@
// Eryn Wells <eryn@erynwells.me> // Eryn Wells <eryn@erynwells.me>
use crate::Move; use crate::{Move, MoveBuilder};
use chessfriend_bitboard::BitBoard; use chessfriend_bitboard::BitBoard;
use chessfriend_core::PlacedPiece; use chessfriend_core::{Color, Piece, PlacedPiece, Shape};
#[derive(Clone, Debug, Eq, PartialEq)] #[derive(Clone, Debug, Default, Eq, PartialEq)]
struct BitBoardSet { struct BitBoardSet {
quiet: BitBoard, quiet: BitBoard,
captures: BitBoard, captures: BitBoard,
@ -34,10 +34,7 @@ impl MoveSet {
pub(super) fn new(piece: PlacedPiece) -> MoveSet { pub(super) fn new(piece: PlacedPiece) -> MoveSet {
MoveSet { MoveSet {
piece, piece,
bitboards: BitBoardSet { bitboards: BitBoardSet::default(),
quiet: BitBoard::empty(),
captures: BitBoard::empty(),
},
move_lists: MoveListSet { move_lists: MoveListSet {
quiet: Vec::new(), quiet: Vec::new(),
captures: Vec::new(), captures: Vec::new(),
@ -45,25 +42,13 @@ impl MoveSet {
} }
} }
pub(super) fn quiet_moves( pub(super) fn quiet_moves(mut self, bitboard: BitBoard) -> MoveSet {
mut self,
bitboard: BitBoard,
move_list: impl Iterator<Item = Move>,
) -> MoveSet {
self.bitboards.quiet = bitboard; self.bitboards.quiet = bitboard;
self.move_lists.quiet = move_list.collect();
self self
} }
pub(super) fn capture_moves( pub(super) fn capture_moves(mut self, bitboard: BitBoard) -> MoveSet {
mut self,
bitboard: BitBoard,
move_list: impl Iterator<Item = Move>,
) -> MoveSet {
self.bitboards.captures = bitboard; self.bitboards.captures = bitboard;
self.move_lists.captures = move_list.collect();
self self
} }
@ -72,10 +57,26 @@ impl MoveSet {
self.bitboards.captures | self.bitboards.quiet self.bitboards.captures | self.bitboards.quiet
} }
pub(super) fn moves(&self) -> impl Iterator<Item = &Move> { pub(super) fn moves(&self) -> impl Iterator<Item = Move> + '_ {
self.move_lists let piece = self.piece.piece();
.captures let from_square = self.piece.square();
.iter()
.chain(self.move_lists.quiet.iter()) self.bitboards
.quiet
.occupied_squares()
.map(move |to_square| MoveBuilder::new(*piece, from_square, to_square).build())
.chain(
self.bitboards
.captures
.occupied_squares()
.map(move |to_square| {
MoveBuilder::new(*piece, from_square, to_square)
.capturing(PlacedPiece::new(
Piece::new(Color::White, Shape::Pawn),
to_square,
))
.build()
}),
)
} }
} }