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:
parent
c558800385
commit
d910ff708e
1 changed files with 27 additions and 26 deletions
|
@ -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()
|
||||||
|
}),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue