[bitboard,core,position] Address a bunch of clippy warnings
This commit is contained in:
		
							parent
							
								
									d0abbd8f93
								
							
						
					
					
						commit
						27a36565f3
					
				
					 8 changed files with 63 additions and 32 deletions
				
			
		| 
						 | 
					@ -89,7 +89,7 @@ mod tests {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #[test]
 | 
					    #[test]
 | 
				
			||||||
    fn leading_complex() {
 | 
					    fn leading_complex() {
 | 
				
			||||||
        let mut scanner = LeadingBitScanner::new(0b11000101);
 | 
					        let mut scanner = LeadingBitScanner::new(0b_1100_0101);
 | 
				
			||||||
        assert_eq!(scanner.next(), Some(7));
 | 
					        assert_eq!(scanner.next(), Some(7));
 | 
				
			||||||
        assert_eq!(scanner.next(), Some(6));
 | 
					        assert_eq!(scanner.next(), Some(6));
 | 
				
			||||||
        assert_eq!(scanner.next(), Some(2));
 | 
					        assert_eq!(scanner.next(), Some(2));
 | 
				
			||||||
| 
						 | 
					@ -112,7 +112,7 @@ mod tests {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #[test]
 | 
					    #[test]
 | 
				
			||||||
    fn trailing_complex() {
 | 
					    fn trailing_complex() {
 | 
				
			||||||
        let mut scanner = TrailingBitScanner::new(0b11000101);
 | 
					        let mut scanner = TrailingBitScanner::new(0b_1100_0101);
 | 
				
			||||||
        assert_eq!(scanner.next(), Some(0));
 | 
					        assert_eq!(scanner.next(), Some(0));
 | 
				
			||||||
        assert_eq!(scanner.next(), Some(2));
 | 
					        assert_eq!(scanner.next(), Some(2));
 | 
				
			||||||
        assert_eq!(scanner.next(), Some(6));
 | 
					        assert_eq!(scanner.next(), Some(6));
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -146,18 +146,23 @@ impl BitBoard {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl BitBoard {
 | 
					impl BitBoard {
 | 
				
			||||||
    /// Return an Iterator over the occupied squares, starting from the leading
 | 
					    /// Returns an Iterator over the occupied squares.
 | 
				
			||||||
    /// (most-significant bit) end of the field.
 | 
					    ///
 | 
				
			||||||
 | 
					    /// The Iterator yields squares starting from the leading (most-significant bit) end of the
 | 
				
			||||||
 | 
					    /// board to the trailing (least-significant bit) end.
 | 
				
			||||||
 | 
					    #[must_use]
 | 
				
			||||||
    pub fn occupied_squares(&self) -> impl Iterator<Item = Square> {
 | 
					    pub fn occupied_squares(&self) -> impl Iterator<Item = Square> {
 | 
				
			||||||
        LeadingBitScanner::new(self.0).map(|idx| unsafe { Square::from_index(idx as u8) })
 | 
					        LeadingBitScanner::new(self.0).map(|idx| unsafe { Square::from_index(idx as u8) })
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// Return an Iterator over the occupied squares, starting from the trailing
 | 
					    /// Return an Iterator over the occupied squares, starting from the trailing
 | 
				
			||||||
    /// (least-significant bit) end of the field.
 | 
					    /// (least-significant bit) end of the field.
 | 
				
			||||||
 | 
					    #[must_use]
 | 
				
			||||||
    pub fn occupied_squares_trailing(&self) -> impl Iterator<Item = Square> {
 | 
					    pub fn occupied_squares_trailing(&self) -> impl Iterator<Item = Square> {
 | 
				
			||||||
        TrailingBitScanner::new(self.0).map(|idx| unsafe { Square::from_index(idx as u8) })
 | 
					        TrailingBitScanner::new(self.0).map(|idx| unsafe { Square::from_index(idx as u8) })
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[must_use]
 | 
				
			||||||
    pub fn first_occupied_square(&self) -> Option<Square> {
 | 
					    pub fn first_occupied_square(&self) -> Option<Square> {
 | 
				
			||||||
        let leading_zeros = self.0.leading_zeros() as u8;
 | 
					        let leading_zeros = self.0.leading_zeros() as u8;
 | 
				
			||||||
        if leading_zeros < Square::NUM as u8 {
 | 
					        if leading_zeros < Square::NUM as u8 {
 | 
				
			||||||
| 
						 | 
					@ -167,6 +172,7 @@ impl BitBoard {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[must_use]
 | 
				
			||||||
    pub fn first_occupied_square_trailing(&self) -> Option<Square> {
 | 
					    pub fn first_occupied_square_trailing(&self) -> Option<Square> {
 | 
				
			||||||
        let trailing_zeros = self.0.trailing_zeros() as u8;
 | 
					        let trailing_zeros = self.0.trailing_zeros() as u8;
 | 
				
			||||||
        if trailing_zeros < Square::NUM as u8 {
 | 
					        if trailing_zeros < Square::NUM as u8 {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,17 +12,21 @@ use crate::BitBoard;
 | 
				
			||||||
use chessfriend_core::{Color, Direction, Square};
 | 
					use chessfriend_core::{Color, Direction, Square};
 | 
				
			||||||
use std::sync::OnceLock;
 | 
					use std::sync::OnceLock;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[allow(clippy::identity_op)]
 | 
				
			||||||
 | 
					#[allow(clippy::erasing_op)]
 | 
				
			||||||
pub(crate) const RANKS: [BitBoard; 8] = [
 | 
					pub(crate) const RANKS: [BitBoard; 8] = [
 | 
				
			||||||
    BitBoard(0xFF << 0 * 8),
 | 
					    BitBoard(0xFF << (0 * 8)),
 | 
				
			||||||
    BitBoard(0xFF << 1 * 8),
 | 
					    BitBoard(0xFF << (1 * 8)),
 | 
				
			||||||
    BitBoard(0xFF << 2 * 8),
 | 
					    BitBoard(0xFF << (2 * 8)),
 | 
				
			||||||
    BitBoard(0xFF << 3 * 8),
 | 
					    BitBoard(0xFF << (3 * 8)),
 | 
				
			||||||
    BitBoard(0xFF << 4 * 8),
 | 
					    BitBoard(0xFF << (4 * 8)),
 | 
				
			||||||
    BitBoard(0xFF << 5 * 8),
 | 
					    BitBoard(0xFF << (5 * 8)),
 | 
				
			||||||
    BitBoard(0xFF << 6 * 8),
 | 
					    BitBoard(0xFF << (6 * 8)),
 | 
				
			||||||
    BitBoard(0xFF << 7 * 8),
 | 
					    BitBoard(0xFF << (7 * 8)),
 | 
				
			||||||
];
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[allow(clippy::identity_op)]
 | 
				
			||||||
 | 
					#[allow(clippy::erasing_op)]
 | 
				
			||||||
pub(crate) const FILES: [BitBoard; 8] = [
 | 
					pub(crate) const FILES: [BitBoard; 8] = [
 | 
				
			||||||
    BitBoard(0x0101010101010101 << 0),
 | 
					    BitBoard(0x0101010101010101 << 0),
 | 
				
			||||||
    BitBoard(0x0101010101010101 << 1),
 | 
					    BitBoard(0x0101010101010101 << 1),
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,8 +3,9 @@
 | 
				
			||||||
use crate::{errors::TryFromCharError, try_from_string};
 | 
					use crate::{errors::TryFromCharError, try_from_string};
 | 
				
			||||||
use std::fmt;
 | 
					use std::fmt;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
 | 
					#[derive(Clone, Copy, Debug, Default, Eq, Hash, PartialEq)]
 | 
				
			||||||
pub enum Color {
 | 
					pub enum Color {
 | 
				
			||||||
 | 
					    #[default]
 | 
				
			||||||
    White = 0,
 | 
					    White = 0,
 | 
				
			||||||
    Black = 1,
 | 
					    Black = 1,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -16,7 +17,9 @@ impl Color {
 | 
				
			||||||
        Color::ALL.iter()
 | 
					        Color::ALL.iter()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pub fn other(&self) -> Color {
 | 
					    /// The other color
 | 
				
			||||||
 | 
					    #[must_use]
 | 
				
			||||||
 | 
					    pub const fn other(&self) -> Color {
 | 
				
			||||||
        match self {
 | 
					        match self {
 | 
				
			||||||
            Color::White => Color::Black,
 | 
					            Color::White => Color::Black,
 | 
				
			||||||
            Color::Black => Color::White,
 | 
					            Color::Black => Color::White,
 | 
				
			||||||
| 
						 | 
					@ -24,12 +27,6 @@ impl Color {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl Default for Color {
 | 
					 | 
				
			||||||
    fn default() -> Self {
 | 
					 | 
				
			||||||
        Color::White
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
impl fmt::Display for Color {
 | 
					impl fmt::Display for Color {
 | 
				
			||||||
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
 | 
					    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
 | 
				
			||||||
        write!(
 | 
					        write!(
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -34,7 +34,7 @@ impl Shape {
 | 
				
			||||||
        PROMOTABLE_SHAPES.iter()
 | 
					        PROMOTABLE_SHAPES.iter()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const fn to_ascii(&self) -> char {
 | 
					    const fn to_ascii(self) -> char {
 | 
				
			||||||
        match self {
 | 
					        match self {
 | 
				
			||||||
            Shape::Pawn => 'P',
 | 
					            Shape::Pawn => 'P',
 | 
				
			||||||
            Shape::Knight => 'N',
 | 
					            Shape::Knight => 'N',
 | 
				
			||||||
| 
						 | 
					@ -79,7 +79,7 @@ impl Into<char> for Shape {
 | 
				
			||||||
impl fmt::Display for Shape {
 | 
					impl fmt::Display for Shape {
 | 
				
			||||||
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
 | 
					    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
 | 
				
			||||||
        let self_char: char = self.into();
 | 
					        let self_char: char = self.into();
 | 
				
			||||||
        write!(f, "{}", self_char)
 | 
					        write!(f, "{self_char}")
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -91,6 +91,7 @@ pub struct Piece {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
macro_rules! piece_constructor {
 | 
					macro_rules! piece_constructor {
 | 
				
			||||||
    ($func_name:ident, $type:tt) => {
 | 
					    ($func_name:ident, $type:tt) => {
 | 
				
			||||||
 | 
					        #[must_use]
 | 
				
			||||||
        pub fn $func_name(color: Color) -> Piece {
 | 
					        pub fn $func_name(color: Color) -> Piece {
 | 
				
			||||||
            Piece {
 | 
					            Piece {
 | 
				
			||||||
                color,
 | 
					                color,
 | 
				
			||||||
| 
						 | 
					@ -102,6 +103,7 @@ macro_rules! piece_constructor {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
macro_rules! is_shape {
 | 
					macro_rules! is_shape {
 | 
				
			||||||
    ($func_name:ident, $shape:ident) => {
 | 
					    ($func_name:ident, $shape:ident) => {
 | 
				
			||||||
 | 
					        #[must_use]
 | 
				
			||||||
        pub fn $func_name(&self) -> bool {
 | 
					        pub fn $func_name(&self) -> bool {
 | 
				
			||||||
            self.shape == Shape::$shape
 | 
					            self.shape == Shape::$shape
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					@ -109,6 +111,7 @@ macro_rules! is_shape {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl Piece {
 | 
					impl Piece {
 | 
				
			||||||
 | 
					    #[must_use]
 | 
				
			||||||
    pub fn new(color: Color, shape: Shape) -> Piece {
 | 
					    pub fn new(color: Color, shape: Shape) -> Piece {
 | 
				
			||||||
        Piece { color, shape }
 | 
					        Piece { color, shape }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -120,10 +123,12 @@ impl Piece {
 | 
				
			||||||
    piece_constructor!(queen, Queen);
 | 
					    piece_constructor!(queen, Queen);
 | 
				
			||||||
    piece_constructor!(king, King);
 | 
					    piece_constructor!(king, King);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[must_use]
 | 
				
			||||||
    pub fn color(&self) -> Color {
 | 
					    pub fn color(&self) -> Color {
 | 
				
			||||||
        self.color
 | 
					        self.color
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[must_use]
 | 
				
			||||||
    pub fn shape(&self) -> Shape {
 | 
					    pub fn shape(&self) -> Shape {
 | 
				
			||||||
        self.shape
 | 
					        self.shape
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -135,7 +140,8 @@ impl Piece {
 | 
				
			||||||
    is_shape!(is_queen, Queen);
 | 
					    is_shape!(is_queen, Queen);
 | 
				
			||||||
    is_shape!(is_king, King);
 | 
					    is_shape!(is_king, King);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pub fn to_ascii(&self) -> char {
 | 
					    #[must_use]
 | 
				
			||||||
 | 
					    pub fn to_ascii(self) -> char {
 | 
				
			||||||
        let ch = self.shape.to_ascii();
 | 
					        let ch = self.shape.to_ascii();
 | 
				
			||||||
        match self.color {
 | 
					        match self.color {
 | 
				
			||||||
            Color::White => ch,
 | 
					            Color::White => ch,
 | 
				
			||||||
| 
						 | 
					@ -143,7 +149,8 @@ impl Piece {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fn to_unicode(&self) -> char {
 | 
					    #[must_use]
 | 
				
			||||||
 | 
					    fn to_unicode(self) -> char {
 | 
				
			||||||
        match (self.color, self.shape) {
 | 
					        match (self.color, self.shape) {
 | 
				
			||||||
            (Color::Black, Shape::Pawn) => '♟',
 | 
					            (Color::Black, Shape::Pawn) => '♟',
 | 
				
			||||||
            (Color::Black, Shape::Knight) => '♞',
 | 
					            (Color::Black, Shape::Knight) => '♞',
 | 
				
			||||||
| 
						 | 
					@ -175,6 +182,7 @@ pub struct PlacedPiece {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
macro_rules! is_shape {
 | 
					macro_rules! is_shape {
 | 
				
			||||||
    ($func_name:ident, $shape:ident) => {
 | 
					    ($func_name:ident, $shape:ident) => {
 | 
				
			||||||
 | 
					        #[must_use]
 | 
				
			||||||
        pub fn $func_name(&self) -> bool {
 | 
					        pub fn $func_name(&self) -> bool {
 | 
				
			||||||
            self.piece().shape == Shape::$shape
 | 
					            self.piece().shape == Shape::$shape
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					@ -182,26 +190,35 @@ macro_rules! is_shape {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl PlacedPiece {
 | 
					impl PlacedPiece {
 | 
				
			||||||
 | 
					    #[must_use]
 | 
				
			||||||
    pub const fn new(piece: Piece, square: Square) -> PlacedPiece {
 | 
					    pub const fn new(piece: Piece, square: Square) -> PlacedPiece {
 | 
				
			||||||
        PlacedPiece { piece, square }
 | 
					        PlacedPiece { piece, square }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// The [Piece] itself
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
 | 
					    #[must_use]
 | 
				
			||||||
    pub fn piece(&self) -> &Piece {
 | 
					    pub fn piece(&self) -> &Piece {
 | 
				
			||||||
        &self.piece
 | 
					        &self.piece
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// The square the piece is on
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
 | 
					    #[must_use]
 | 
				
			||||||
    pub fn square(&self) -> Square {
 | 
					    pub fn square(&self) -> Square {
 | 
				
			||||||
        self.square
 | 
					        self.square
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// The piece's [Color]
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
 | 
					    #[must_use]
 | 
				
			||||||
    pub fn color(&self) -> Color {
 | 
					    pub fn color(&self) -> Color {
 | 
				
			||||||
        self.piece.color
 | 
					        self.piece.color
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// The piece's [Shape]
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
 | 
					    #[must_use]
 | 
				
			||||||
    pub fn shape(&self) -> Shape {
 | 
					    pub fn shape(&self) -> Shape {
 | 
				
			||||||
        self.piece.shape
 | 
					        self.piece.shape
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -213,6 +230,7 @@ impl PlacedPiece {
 | 
				
			||||||
    is_shape!(is_queen, Queen);
 | 
					    is_shape!(is_queen, Queen);
 | 
				
			||||||
    is_shape!(is_king, King);
 | 
					    is_shape!(is_king, King);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[must_use]
 | 
				
			||||||
    pub fn is_kingside_rook(&self) -> bool {
 | 
					    pub fn is_kingside_rook(&self) -> bool {
 | 
				
			||||||
        self.is_rook()
 | 
					        self.is_rook()
 | 
				
			||||||
            && match self.color() {
 | 
					            && match self.color() {
 | 
				
			||||||
| 
						 | 
					@ -221,6 +239,7 @@ impl PlacedPiece {
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[must_use]
 | 
				
			||||||
    pub fn is_queenside_rook(&self) -> bool {
 | 
					    pub fn is_queenside_rook(&self) -> bool {
 | 
				
			||||||
        self.is_rook()
 | 
					        self.is_rook()
 | 
				
			||||||
            && match self.color() {
 | 
					            && match self.color() {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,10 +1,9 @@
 | 
				
			||||||
// Eryn Wells <eryn@erynwells.me>
 | 
					// Eryn Wells <eryn@erynwells.me>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use crate::sight::SliderRayToSquareExt;
 | 
				
			||||||
use chessfriend_bitboard::BitBoard;
 | 
					use chessfriend_bitboard::BitBoard;
 | 
				
			||||||
use chessfriend_core::Shape;
 | 
					use chessfriend_core::Shape;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::sight::SliderRayToSquareExt;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#[derive(Clone, Debug, Eq, PartialEq)]
 | 
					#[derive(Clone, Debug, Eq, PartialEq)]
 | 
				
			||||||
pub struct CheckingPieces {
 | 
					pub struct CheckingPieces {
 | 
				
			||||||
    bitboards: [BitBoard; 5],
 | 
					    bitboards: [BitBoard; 5],
 | 
				
			||||||
| 
						 | 
					@ -23,12 +22,12 @@ impl CheckingPieces {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// The number of checking pieces.
 | 
				
			||||||
    pub fn count(&self) -> u32 {
 | 
					    pub fn count(&self) -> u32 {
 | 
				
			||||||
        self.bitboards.iter().map(BitBoard::population_count).sum()
 | 
					        self.bitboards.iter().map(BitBoard::population_count).sum()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// A BitBoard representing the set of pieces that must be captured to
 | 
					    /// A BitBoard representing the set of pieces that must be captured to resolve check.
 | 
				
			||||||
    /// resolve check.
 | 
					 | 
				
			||||||
    pub fn capture_mask(&self) -> BitBoard {
 | 
					    pub fn capture_mask(&self) -> BitBoard {
 | 
				
			||||||
        if self.count() == 0 {
 | 
					        if self.count() == 0 {
 | 
				
			||||||
            BitBoard::FULL
 | 
					            BitBoard::FULL
 | 
				
			||||||
| 
						 | 
					@ -39,8 +38,8 @@ impl CheckingPieces {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// A BitBoard representing the set of squares to which a player can move a
 | 
					    /// A BitBoard representing the set of squares to which a player can move a piece to block a
 | 
				
			||||||
    /// piece to block a checking piece.
 | 
					    /// checking piece.
 | 
				
			||||||
    pub fn push_mask(&self, king: &BitBoard) -> BitBoard {
 | 
					    pub fn push_mask(&self, king: &BitBoard) -> BitBoard {
 | 
				
			||||||
        let target = king.first_occupied_square().unwrap();
 | 
					        let target = king.first_occupied_square().unwrap();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -78,7 +78,7 @@ impl PieceBitBoards {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pub(super) fn place_piece(&mut self, piece: &PlacedPiece) -> Result<(), PlacePieceError> {
 | 
					    pub(super) fn place_piece(&mut self, piece: &PlacedPiece) -> Result<(), PlacePieceError> {
 | 
				
			||||||
        self.place_piece_with_strategy(piece, Default::default())
 | 
					        self.place_piece_with_strategy(piece, PlacePieceStrategy::default())
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pub(super) fn place_piece_with_strategy(
 | 
					    pub(super) fn place_piece_with_strategy(
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -138,22 +138,27 @@ impl Position {
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// Return a BitBoard representing the set of squares containing a piece.
 | 
					    /// A [BitBoard] representing the set of squares containing a piece.
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
 | 
					    #[must_use]
 | 
				
			||||||
    pub(crate) fn occupied_squares(&self) -> &BitBoard {
 | 
					    pub(crate) fn occupied_squares(&self) -> &BitBoard {
 | 
				
			||||||
        &self.pieces.all_pieces()
 | 
					        &self.pieces.all_pieces()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
 | 
					    #[must_use]
 | 
				
			||||||
    pub(crate) fn friendly_pieces(&self) -> &BitBoard {
 | 
					    pub(crate) fn friendly_pieces(&self) -> &BitBoard {
 | 
				
			||||||
        self.pieces.all_pieces_of_color(self.color_to_move)
 | 
					        self.pieces.all_pieces_of_color(self.color_to_move)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
 | 
					    #[must_use]
 | 
				
			||||||
    pub(crate) fn opposing_pieces(&self) -> &BitBoard {
 | 
					    pub(crate) fn opposing_pieces(&self) -> &BitBoard {
 | 
				
			||||||
        self.pieces.all_pieces_of_color(self.color_to_move.other())
 | 
					        self.pieces.all_pieces_of_color(self.color_to_move.other())
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[inline]
 | 
				
			||||||
 | 
					    #[must_use]
 | 
				
			||||||
    pub(crate) fn all_pieces(&self) -> (&BitBoard, &BitBoard) {
 | 
					    pub(crate) fn all_pieces(&self) -> (&BitBoard, &BitBoard) {
 | 
				
			||||||
        (self.friendly_pieces(), self.opposing_pieces())
 | 
					        (self.friendly_pieces(), self.opposing_pieces())
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -161,6 +166,7 @@ impl Position {
 | 
				
			||||||
    /// Return a BitBoard representing the set of squares containing a piece.
 | 
					    /// Return a BitBoard representing the set of squares containing a piece.
 | 
				
			||||||
    /// This set is the inverse of `occupied_squares`.
 | 
					    /// This set is the inverse of `occupied_squares`.
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
 | 
					    #[must_use]
 | 
				
			||||||
    pub(crate) fn empty_squares(&self) -> BitBoard {
 | 
					    pub(crate) fn empty_squares(&self) -> BitBoard {
 | 
				
			||||||
        !self.occupied_squares()
 | 
					        !self.occupied_squares()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue