pub struct BitBoard(pub u64);Expand description
A BitBoard represents a 64-bit chessboard where each bit corresponds to a square.
It is useful for efficiently representing and manipulating chess positions.
The bitboard follows the Little-Endian Rank-File (LERF) notation. In this system, the least significant bit (LSB) represents the bottom-left corner of the chessboard, while the most significant bit (MSB) represents the top-right corner.
8 | 56 57 58 59 60 61 62 63
7 | 48 49 50 51 52 53 54 55
6 | 40 41 42 43 44 45 46 47
5 | 32 33 34 35 36 37 38 39
4 | 24 25 26 27 28 29 30 31
3 | 16 17 18 19 20 21 22 23
2 | 8 9 10 11 12 13 14 15
1 | 0 1 2 3 4 5 6 7
-------------------------
A B C D E F G HTuple Fields§
§0: u64Implementations§
Source§impl BitBoard
Methods for the BitBoard struct, including utilities for manipulating bits and interacting with squares.
impl BitBoard
Methods for the BitBoard struct, including utilities for manipulating bits and interacting with squares.
Sourcepub const WHITE_SIDE: BitBoard
pub const WHITE_SIDE: BitBoard
BitBoard representing WHITE_SIDE.
Sourcepub const BLACK_SIDE: BitBoard
pub const BLACK_SIDE: BitBoard
BitBoard representing BLACK_SIDE.
Sourcepub const DARK_SQUARES: BitBoard
pub const DARK_SQUARES: BitBoard
BitBoard representing DARK_SQUARES.
Sourcepub const LIGHT_SQUARES: BitBoard
pub const LIGHT_SQUARES: BitBoard
BitBoard representing LIGHT_SQUARES.
Sourcepub const fn to_square(self) -> Option<Square>
pub const fn to_square(self) -> Option<Square>
Converts the BitBoard to a Square by returning the square corresponding to
the least significant set bit (LSB), or None if the bitboard is empty.
§Examples
// BitBoard with a single bit set at B2
let bitboard = BitBoard(1 << Square::B2 as u64);
assert_eq!(bitboard.to_square(), Some(Square::B2));
// BitBoard with multiple bits set; returns the least significant one (D1)
let bitboard = BitBoard((1 << Square::D1 as u64) | (1 << Square::E1 as u64));
assert_eq!(bitboard.to_square(), Some(Square::D1));
// Empty BitBoard returns None
let bitboard = BitBoard::EMPTY;
assert_eq!(bitboard.to_square(), None);Sourcepub const fn to_square_nearest<const COLOR: usize>(self) -> Option<Square>
pub const fn to_square_nearest<const COLOR: usize>(self) -> Option<Square>
Returns the nearest Square set in the bitboard, based on the specified color’s perspective.
This method returns the square corresponding to the most relevant bit set in the bitboard:
- For
White, the nearest square is the least significant bit (LSB), i.e., the lowest square index. - For
Black, the nearest square is the most significant bit (MSB), i.e., the highest square index.
This is particularly useful when evaluating move generation or determining priority based on color direction.
§Examples
// Bitboard with multiple squares set
let bitboard = BitBoard((1 << Square::C3 as u64) | (1 << Square::E5 as u64));
// From White's perspective, C3 is the closest (LSB)
assert_eq!(bitboard.to_square_nearest::<{Color::White as usize}>(), Some(Square::C3));
// From Black's perspective, E5 is the closest (MSB)
assert_eq!(bitboard.to_square_nearest::<{Color::Black as usize}>(), Some(Square::E5));
// Empty bitboard returns None
let empty = BitBoard::EMPTY;
assert_eq!(empty.to_square_nearest::<{Color::White as usize}>(), None);Sourcepub const fn set_square(self, square: Square) -> Self
pub const fn set_square(self, square: Square) -> Self
Returns a new BitBoard with the bit corresponding to the given Square set to 1.
This operation does not mutate the original BitBoard, but instead returns a new instance
with the specified square set.
§Examples
// Setting a bit on an empty square
let bitboard = BitBoard::EMPTY;
assert!(bitboard.is_empty());
let square = Square::C2;
let updated = bitboard.set_square(square);
assert_eq!(updated, BitBoard(1 << Square::C2 as u64));
// Setting a bit on a BitBoard that already has bits set (D1 and E1)
let bitboard = BitBoard((1 << Square::D1 as u64) | (1 << Square::E1 as u64));
let square = Square::C2;
let updated = bitboard.set_square(square);
assert_eq!(updated, BitBoard((1 << Square::D1 as u64) | (1 << Square::E1 as u64) | (1 << Square::C2 as u64)));Sourcepub const fn get_square(self, square: Square) -> bool
pub const fn get_square(self, square: Square) -> bool
Returns true if the bit corresponding to the given Square is set in the BitBoard, otherwise returns false.
This method performs a bitwise check to determine whether the specified square is active (set to 1).
§Examples
let bitboard = BitBoard::EMPTY;
assert!(!bitboard.get_square(Square::C3));
// BitBoard with a single bit set at square C3
let bitboard = BitBoard(1 << Square::C3 as u64);
assert!(bitboard.get_square(Square::C3));
// BitBoard with multiple bits set (E4 and F6)
let bitboard = BitBoard((1 << Square::E4 as u64) | (1 << Square::F6 as u64));
assert!(bitboard.get_square(Square::F6));
assert!(!bitboard.get_square(Square::G1));Sourcepub const fn pop_square(self, square: Square) -> Self
pub const fn pop_square(self, square: Square) -> Self
Returns a new BitBoard with the bit corresponding to the given Square cleared (set to 0).
This operation does not mutate the original BitBoard, but returns a new instance
with the specified square cleared. If the square was already cleared, the result is unchanged.
§Examples
// Clear a square that is set (C4)
let bitboard = BitBoard(1 << Square::C4 as u64);
let updated = bitboard.pop_square(Square::C4);
assert_eq!(updated, BitBoard::EMPTY);
// Clear a square in a multi-bit board (D5 and E6)
let bitboard = BitBoard((1 << Square::D5 as u64) | (1 << Square::E6 as u64));
let updated = bitboard.pop_square(Square::D5);
let expected = BitBoard(1 << Square::E6 as u64);
assert_eq!(updated, expected);
// Clearing a square that is already empty does nothing
let bitboard = BitBoard(1 << Square::H1 as u64);
let updated = bitboard.pop_square(Square::A2);
assert_eq!(updated, bitboard);Sourcepub const fn count_bits(self) -> u32
pub const fn count_bits(self) -> u32
Returns the number of set bits in the BitBoard, representing how many squares are currently occupied.
§Examples
// Empty BitBoard has 0 bits set
let bitboard = BitBoard::EMPTY;
assert_eq!(bitboard.count_bits(), 0);
// BitBoard with a single square set (E4)
let bitboard = BitBoard(1 << Square::E4 as u64);
assert_eq!(bitboard.count_bits(), 1);
// BitBoard with multiple squares set (A1, H8 and D4)
let bitboard = BitBoard((1 << Square::A1 as u64)
| (1 << Square::H8 as u64)
| (1 << Square::D4 as u64));
assert_eq!(bitboard.count_bits(), 3);Sourcepub const fn flip(self) -> Self
pub const fn flip(self) -> Self
Flips the BitBoard vertically by mirroring its bits across the horizontal axis (rank 4).
This operation swaps the ranks of the board so that rank 1 becomes rank 8, rank 2 becomes rank 7, and so on.
§Examples
// A piece on A1 is flipped to A8
let bitboard = BitBoard(1 << Square::A1 as u64);
let flipped = bitboard.flip();
assert_eq!(flipped, BitBoard(1 << Square::A8 as u64));
// Multiple pieces on the first and second ranks flipped to eighth and seventh
let bitboard = BitBoard((1 << Square::B1 as u64) | (1 << Square::C2 as u64));
let flipped = bitboard.flip();
let expected = BitBoard((1 << Square::B8 as u64) | (1 << Square::C7 as u64));
assert_eq!(flipped, expected);
// Flipping twice returns the original position
let original = bitboard;
let flipped_twice = bitboard.flip().flip();
assert_eq!(flipped_twice, original);Sourcepub const fn forward(self, side: Color) -> Self
pub const fn forward(self, side: Color) -> Self
Shifts the BitBoard one rank forward relative to the side to move.
For White, this shifts all bits one rank up (towards rank 8).
For Black, this shifts all bits one rank down (towards rank 1).
This function is commonly used to generate forward moves, such as pawn pushes, and respects the perspective of the side to move.
§Examples
// A White pawn on D2 moves forward to D3
let white_pawn = BitBoard(1 << Square::D2 as u64);
let advanced = white_pawn.forward(Color::White);
assert_eq!(advanced, BitBoard(1 << Square::D3 as u64));
// A Black pawn on E7 moves forward to E6 (i.e., shifted down the board)
let black_pawn = BitBoard(1 << Square::E7 as u64);
let advanced = black_pawn.forward(Color::Black);
assert_eq!(advanced, BitBoard(1 << Square::E6 as u64));§Expected behavior
A square on rank 8 remains off-board after shifting forward, and cannot be shifted back by the same operation
let offboard = BitBoard(1 << Square::H8 as u64).forward(Color::White);
assert_eq!(offboard, BitBoard(0));Sourcepub const fn left(self, side: Color) -> Self
pub const fn left(self, side: Color) -> Self
Returns a new BitBoard representing the squares to the "left" of the current positions,
from the perspective of the given Color.
From White’s perspective, "left" means west (toward file A), and bits are shifted right.
From Black’s perspective, "left" means east (toward file H), and bits are shifted left.
§Examples
// A White piece on D4 moves left to C4
let bitboard = BitBoard(1 << Square::D4 as u64);
let result = bitboard.left(Color::White);
assert_eq!(result, BitBoard(1 << Square::C4 as u64));
// A Black piece on D4 moves left to E4 (inverted perspective)
let bitboard = BitBoard(1 << Square::D4 as u64);
let result = bitboard.left(Color::Black);
assert_eq!(result, BitBoard(1 << Square::E4 as u64));§Note
This operation does not wrap around the board. Any square on the edge (file A for White, file H for Black) will be cleared in the result.
// A White piece on file A cannot move left
let bitboard = BitBoard(1 << Square::A2 as u64);
assert_eq!(bitboard.left(Color::White), BitBoard::EMPTY);
// A Black piece on file H cannot move left
let bitboard = BitBoard(1 << Square::H7 as u64);
assert_eq!(bitboard.left(Color::Black), BitBoard::EMPTY);Sourcepub const fn left_for<const COLOR: usize>(self) -> Self
pub const fn left_for<const COLOR: usize>(self) -> Self
Returns a new BitBoard representing the squares to the "left" of the current positions,
from the perspective of a specific color known at compile time.
For White, "left" refers to west (toward file A), and bits are shifted right.
For Black, "left" refers to east (toward file H), and bits are shifted left.
§Examples
// A White piece on D4 moves left to C4
let bitboard = BitBoard(1 << Square::D4 as u64);
let result = bitboard.left_for::<{ Color::White as usize }>();
assert_eq!(result, BitBoard(1 << Square::C4 as u64));
// A Black piece on D4 moves left to E4 (inverted perspective)
let bitboard = BitBoard(1 << Square::D4 as u64);
let result = bitboard.left_for::<{ Color::Black as usize }>();
assert_eq!(result, BitBoard(1 << Square::E4 as u64));§Note
This operation does not wrap around the board. Any square on the edge (file A for White, file H for Black) will be cleared in the result.
// A White piece on file A cannot move left
let bitboard = BitBoard(1 << Square::A2 as u64);
let result = bitboard.left_for::<{ Color::White as usize }>();
assert_eq!(result, BitBoard::EMPTY);
// A Black piece on file H cannot move left
let bitboard = BitBoard(1 << Square::H7 as u64);
let result = bitboard.left_for::<{ Color::Black as usize }>();
assert_eq!(result, BitBoard::EMPTY);Sourcepub const fn right(self, side: Color) -> Self
pub const fn right(self, side: Color) -> Self
Returns a new BitBoard representing the squares to the "right" of the current positions,
from the perspective of the given Color.
From the perspective of White, "right" means east (toward file H), and bits are shifted left.
From the perspective of Black, "right" means west (toward file A), and bits are shifted right.
§Examples
// A White piece on D4 moves right to E4
let bitboard = BitBoard(1 << Square::D4 as u64);
let result = bitboard.right(Color::White);
assert_eq!(result, BitBoard(1 << Square::E4 as u64));
// A Black piece on D4 moves right to C4 (inverted perspective)
let bitboard = BitBoard(1 << Square::D4 as u64);
let result = bitboard.right(Color::Black);
assert_eq!(result, BitBoard(1 << Square::C4 as u64));§Expected behavior
Squares on the edge files are cleared to avoid horizontal wrap-around:
// A White piece on file H cannot move right
let bitboard = BitBoard(1 << Square::H2 as u64);
assert_eq!(bitboard.right(Color::White), BitBoard::EMPTY);
// A Black piece on file A cannot move right
let bitboard = BitBoard(1 << Square::A7 as u64);
assert_eq!(bitboard.right(Color::Black), BitBoard::EMPTY);Sourcepub const fn right_for<const COLOR: usize>(self) -> Self
pub const fn right_for<const COLOR: usize>(self) -> Self
Returns a new BitBoard representing the squares to the "right" of the current positions,
from the perspective of a specific color known at compile time.
For White, "right" means east (toward file H), and bits are shifted left.
For Black, "right" means west (toward file A), and bits are shifted right.
§Examples
// A White piece on D4 moves right to E4
let bitboard = BitBoard(1 << Square::D4 as u64);
let result = bitboard.right_for::<{ Color::White as usize }>();
assert_eq!(result, BitBoard(1 << Square::E4 as u64));
// A Black piece on D4 moves right to C4 (inverted perspective)
let bitboard = BitBoard(1 << Square::D4 as u64);
let result = bitboard.right_for::<{ Color::Black as usize }>();
assert_eq!(result, BitBoard(1 << Square::C4 as u64));§Expected behavior
Squares on the edge files are cleared to avoid horizontal wrap-around:
// A White piece on file H cannot move right
let bitboard = BitBoard(1 << Square::H2 as u64);
let result = bitboard.right_for::<{ Color::White as usize }>();
assert_eq!(result, BitBoard::EMPTY);
// A Black piece on file A cannot move right
let bitboard = BitBoard(1 << Square::A7 as u64);
let result = bitboard.right_for::<{ Color::Black as usize }>();
assert_eq!(result, BitBoard::EMPTY);Sourcepub const fn up_left(self, side: Color) -> Self
pub const fn up_left(self, side: Color) -> Self
Returns a new BitBoard representing the squares diagonally "up-left" from the current positions,
from the perspective of the given Color.
For White, this corresponds to a shift one rank forward and one file to the left.
For Black, this corresponds to a shift one rank backward and one file to the right.
§Examples
// A White pawn on E4 attacks diagonally up-left to D5
let bitboard = BitBoard(1 << Square::E4 as u64);
let result = bitboard.up_left(Color::White);
assert_eq!(result, BitBoard(1 << Square::D5 as u64));
// A Black pawn on D5 attacks diagonally up-left to E4 (from Black's perspective)
let bitboard = BitBoard(1 << Square::D5 as u64);
let result = bitboard.up_left(Color::Black);
assert_eq!(result, BitBoard(1 << Square::E4 as u64));§Expected behavior
Movement from edge files is masked out to prevent wrap-around:
// A White piece on file A cannot move diagonally up-left
let bitboard = BitBoard(1 << Square::A2 as u64);
let result = bitboard.up_left(Color::White);
assert_eq!(result, BitBoard::EMPTY);
// A Black piece on file H cannot move diagonally up-left
let bitboard = BitBoard(1 << Square::H7 as u64);
let result = bitboard.up_left(Color::Black);
assert_eq!(result, BitBoard::EMPTY);Sourcepub const fn up_left_for<const COLOR: usize>(self) -> Self
pub const fn up_left_for<const COLOR: usize>(self) -> Self
Returns a new BitBoard representing the squares diagonally "up-left" from the current positions,
from the perspective of a specific color known at compile time.
For White, this corresponds to a shift one rank forward and one file to the left.
For Black, this corresponds to a shift one rank backward and one file to the right.
§Examples
// A White pawn on E4 attacks diagonally up-left to D5
let bitboard = BitBoard(1 << Square::E4 as u64);
let result = bitboard.up_left_for::<{ Color::White as usize }>();
assert_eq!(result, BitBoard(1 << Square::D5 as u64));
// A Black pawn on D5 attacks diagonally up-left to E4 (from Black's perspective)
let bitboard = BitBoard(1 << Square::D5 as u64);
let result = bitboard.up_left_for::<{ Color::Black as usize }>();
assert_eq!(result, BitBoard(1 << Square::E4 as u64));§Expected behavior
Movement from edge files is masked out to prevent wrap-around:
// A White piece on file A cannot move diagonally up-left
let bitboard = BitBoard(1 << Square::A2 as u64);
let result = bitboard.up_left_for::<{ Color::White as usize }>();
assert_eq!(result, BitBoard::EMPTY);
// A Black piece on file H cannot move diagonally up-left
let bitboard = BitBoard(1 << Square::H7 as u64);
let result = bitboard.up_left_for::<{ Color::Black as usize }>();
assert_eq!(result, BitBoard::EMPTY);Sourcepub const fn up_right(self, side: Color) -> Self
pub const fn up_right(self, side: Color) -> Self
Returns a new BitBoard representing the squares diagonally "up-right" from the current positions,
from the perspective of the given Color.
For White, this corresponds to a shift one rank forward and one file to the right.
For Black, this corresponds to a shift one rank backward and one file to the left.
§Examples
// A White pawn on E4 attacks diagonally up-right to F5
let bitboard = BitBoard(1 << Square::E4 as u64);
let result = bitboard.up_right(Color::White);
assert_eq!(result, BitBoard(1 << Square::F5 as u64));
// A Black pawn on D5 attacks diagonally up-right to C4 (from Black's perspective)
let bitboard = BitBoard(1 << Square::D5 as u64);
let result = bitboard.up_right(Color::Black);
assert_eq!(result, BitBoard(1 << Square::C4 as u64));§Expected behavior
Movement from edge files is masked out to prevent wrap-around:
// A White piece on file H cannot move diagonally up-right
let bitboard = BitBoard(1 << Square::H2 as u64);
let result = bitboard.up_right(Color::White);
assert_eq!(result, BitBoard::EMPTY);
// A Black piece on file A cannot move diagonally up-right
let bitboard = BitBoard(1 << Square::A7 as u64);
let result = bitboard.up_right(Color::Black);
assert_eq!(result, BitBoard::EMPTY);Sourcepub const fn up_right_for<const COLOR: usize>(self) -> Self
pub const fn up_right_for<const COLOR: usize>(self) -> Self
Returns a new BitBoard representing the squares diagonally "up-right" from the current positions,
from the perspective of a specific color known at compile time.
For White, this corresponds to a shift one rank forward and one file to the right.
For Black, this corresponds to a shift one rank backward and one file to the left.
§Examples
// A White pawn on E4 attacks diagonally up-right to F5
let bitboard = BitBoard(1 << Square::E4 as u64);
let result = bitboard.up_right_for::<{ Color::White as usize }>();
assert_eq!(result, BitBoard(1 << Square::F5 as u64));
// A Black pawn on D5 attacks diagonally up-right to C4 (from Black's perspective)
let bitboard = BitBoard(1 << Square::D5 as u64);
let result = bitboard.up_right_for::<{ Color::Black as usize }>();
assert_eq!(result, BitBoard(1 << Square::C4 as u64));§Expected behavior
Squares on the edge files are cleared to avoid horizontal wrap-around:
// A White piece on file H cannot move diagonally up-right
let bitboard = BitBoard(1 << Square::H4 as u64);
let result = bitboard.up_right_for::<{ Color::White as usize }>();
assert_eq!(result, BitBoard::EMPTY);
// A Black piece on file A cannot move diagonally up-right
let bitboard = BitBoard(1 << Square::A6 as u64);
let result = bitboard.up_right_for::<{ Color::Black as usize }>();
assert_eq!(result, BitBoard::EMPTY);Sourcepub const fn is_empty(self) -> bool
pub const fn is_empty(self) -> bool
Returns true if the BitBoard is empty (i.e., no bits are set), otherwise returns false.
An empty BitBoard means that no squares are occupied — all 64 bits are zero.
§Examples
// An explicitly empty BitBoard
let empty = BitBoard::EMPTY;
assert!(empty.is_empty());
// A BitBoard with a single square set is not empty
let bitboard = BitBoard(1 << Square::E4 as u64);
assert!(!bitboard.is_empty());
// BitBoard cleared by an operation becomes empty
let occupied = BitBoard(1 << Square::D2 as u64);
let cleared = occupied.pop_square(Square::D2);
assert!(cleared.is_empty());Trait Implementations§
Source§impl BitAndAssign for BitBoard
impl BitAndAssign for BitBoard
Source§fn bitand_assign(&mut self, other: Self)
fn bitand_assign(&mut self, other: Self)
&= operation. Read moreSource§impl BitOrAssign for BitBoard
impl BitOrAssign for BitBoard
Source§fn bitor_assign(&mut self, other: Self)
fn bitor_assign(&mut self, other: Self)
|= operation. Read moreSource§impl BitXorAssign for BitBoard
impl BitXorAssign for BitBoard
Source§fn bitxor_assign(&mut self, other: Self)
fn bitxor_assign(&mut self, other: Self)
^= operation. Read moreSource§impl Display for BitBoard
Implements display formatting for the BitBoard struct.
This allows for the BitBoard to be printed in a human-readable format,
where filled squares are shown as ‘★’ and empty squares as ‘·’.
impl Display for BitBoard
Implements display formatting for the BitBoard struct.
This allows for the BitBoard to be printed in a human-readable format,
where filled squares are shown as ‘★’ and empty squares as ‘·’.
Source§impl Iterator for BitBoard
Implements Iterator for BitBoard, allowing iteration over the set squares.
Each call to next returns the next Square that is set (i.e., the next ‘1’ bit)
impl Iterator for BitBoard
Implements Iterator for BitBoard, allowing iteration over the set squares.
Each call to next returns the next Square that is set (i.e., the next ‘1’ bit)
Source§fn next(&mut self) -> Option<Square>
fn next(&mut self) -> Option<Square>
Source§fn next_chunk<const N: usize>(
&mut self,
) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where
Self: Sized,
fn next_chunk<const N: usize>(
&mut self,
) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where
Self: Sized,
iter_next_chunk)N values. Read more1.0.0 · Source§fn size_hint(&self) -> (usize, Option<usize>)
fn size_hint(&self) -> (usize, Option<usize>)
1.0.0 · Source§fn count(self) -> usizewhere
Self: Sized,
fn count(self) -> usizewhere
Self: Sized,
1.0.0 · Source§fn last(self) -> Option<Self::Item>where
Self: Sized,
fn last(self) -> Option<Self::Item>where
Self: Sized,
Source§fn advance_by(&mut self, n: usize) -> Result<(), NonZero<usize>>
fn advance_by(&mut self, n: usize) -> Result<(), NonZero<usize>>
iter_advance_by)n elements. Read more1.0.0 · Source§fn nth(&mut self, n: usize) -> Option<Self::Item>
fn nth(&mut self, n: usize) -> Option<Self::Item>
nth element of the iterator. Read more1.28.0 · Source§fn step_by(self, step: usize) -> StepBy<Self>where
Self: Sized,
fn step_by(self, step: usize) -> StepBy<Self>where
Self: Sized,
1.0.0 · Source§fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>
fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>
1.0.0 · Source§fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where
Self: Sized,
U: IntoIterator,
fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where
Self: Sized,
U: IntoIterator,
Source§fn intersperse(self, separator: Self::Item) -> Intersperse<Self>
fn intersperse(self, separator: Self::Item) -> Intersperse<Self>
iter_intersperse)separator between adjacent
items of the original iterator. Read moreSource§fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>
fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>
iter_intersperse)separator
between adjacent items of the original iterator. Read more1.0.0 · Source§fn map<B, F>(self, f: F) -> Map<Self, F>
fn map<B, F>(self, f: F) -> Map<Self, F>
1.0.0 · Source§fn filter<P>(self, predicate: P) -> Filter<Self, P>
fn filter<P>(self, predicate: P) -> Filter<Self, P>
1.0.0 · Source§fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>
fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>
1.0.0 · Source§fn enumerate(self) -> Enumerate<Self>where
Self: Sized,
fn enumerate(self) -> Enumerate<Self>where
Self: Sized,
1.0.0 · Source§fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>
fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>
1.0.0 · Source§fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>
fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>
1.57.0 · Source§fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>
fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>
1.0.0 · Source§fn skip(self, n: usize) -> Skip<Self>where
Self: Sized,
fn skip(self, n: usize) -> Skip<Self>where
Self: Sized,
n elements. Read more1.0.0 · Source§fn take(self, n: usize) -> Take<Self>where
Self: Sized,
fn take(self, n: usize) -> Take<Self>where
Self: Sized,
n elements, or fewer
if the underlying iterator ends sooner. Read more1.0.0 · Source§fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>
fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>
Source§fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>
fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>
iter_map_windows)f for each contiguous window of size N over
self and returns an iterator over the outputs of f. Like slice::windows(),
the windows during mapping overlap as well. Read more1.0.0 · Source§fn inspect<F>(self, f: F) -> Inspect<Self, F>
fn inspect<F>(self, f: F) -> Inspect<Self, F>
1.0.0 · Source§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
Iterator. Read moreSource§fn collect_into<E>(self, collection: &mut E) -> &mut E
fn collect_into<E>(self, collection: &mut E) -> &mut E
iter_collect_into)1.0.0 · Source§fn partition<B, F>(self, f: F) -> (B, B)
fn partition<B, F>(self, f: F) -> (B, B)
Source§fn is_partitioned<P>(self, predicate: P) -> bool
fn is_partitioned<P>(self, predicate: P) -> bool
iter_is_partitioned)true precede all those that return false. Read more1.27.0 · Source§fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R
fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R
1.27.0 · Source§fn try_for_each<F, R>(&mut self, f: F) -> R
fn try_for_each<F, R>(&mut self, f: F) -> R
1.0.0 · Source§fn fold<B, F>(self, init: B, f: F) -> B
fn fold<B, F>(self, init: B, f: F) -> B
1.51.0 · Source§fn reduce<F>(self, f: F) -> Option<Self::Item>
fn reduce<F>(self, f: F) -> Option<Self::Item>
Source§fn try_reduce<R>(
&mut self,
f: impl FnMut(Self::Item, Self::Item) -> R,
) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryType
fn try_reduce<R>( &mut self, f: impl FnMut(Self::Item, Self::Item) -> R, ) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryType
iterator_try_reduce)1.0.0 · Source§fn all<F>(&mut self, f: F) -> bool
fn all<F>(&mut self, f: F) -> bool
1.0.0 · Source§fn any<F>(&mut self, f: F) -> bool
fn any<F>(&mut self, f: F) -> bool
1.0.0 · Source§fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
1.30.0 · Source§fn find_map<B, F>(&mut self, f: F) -> Option<B>
fn find_map<B, F>(&mut self, f: F) -> Option<B>
Source§fn try_find<R>(
&mut self,
f: impl FnMut(&Self::Item) -> R,
) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryType
fn try_find<R>( &mut self, f: impl FnMut(&Self::Item) -> R, ) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryType
try_find)1.0.0 · Source§fn position<P>(&mut self, predicate: P) -> Option<usize>
fn position<P>(&mut self, predicate: P) -> Option<usize>
1.0.0 · Source§fn max(self) -> Option<Self::Item>
fn max(self) -> Option<Self::Item>
1.0.0 · Source§fn min(self) -> Option<Self::Item>
fn min(self) -> Option<Self::Item>
1.6.0 · Source§fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>
fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>
1.15.0 · Source§fn max_by<F>(self, compare: F) -> Option<Self::Item>
fn max_by<F>(self, compare: F) -> Option<Self::Item>
1.6.0 · Source§fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>
fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>
1.15.0 · Source§fn min_by<F>(self, compare: F) -> Option<Self::Item>
fn min_by<F>(self, compare: F) -> Option<Self::Item>
1.0.0 · Source§fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)
fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)
1.36.0 · Source§fn copied<'a, T>(self) -> Copied<Self>
fn copied<'a, T>(self) -> Copied<Self>
Source§fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where
Self: Sized,
fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where
Self: Sized,
iter_array_chunks)N elements of the iterator at a time. Read more1.11.0 · Source§fn product<P>(self) -> P
fn product<P>(self) -> P
Source§fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering
fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering
iter_order_by)Iterator with those
of another with respect to the specified comparison function. Read more1.5.0 · Source§fn partial_cmp<I>(self, other: I) -> Option<Ordering>
fn partial_cmp<I>(self, other: I) -> Option<Ordering>
PartialOrd elements of
this Iterator with those of another. The comparison works like short-circuit
evaluation, returning a result without comparing the remaining elements.
As soon as an order can be determined, the evaluation stops and a result is returned. Read moreSource§fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where
Self: Sized,
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,
fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where
Self: Sized,
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,
iter_order_by)Iterator with those
of another with respect to the specified comparison function. Read moreSource§fn eq_by<I, F>(self, other: I, eq: F) -> bool
fn eq_by<I, F>(self, other: I, eq: F) -> bool
iter_order_by)1.5.0 · Source§fn lt<I>(self, other: I) -> bool
fn lt<I>(self, other: I) -> bool
Iterator are lexicographically
less than those of another. Read more1.5.0 · Source§fn le<I>(self, other: I) -> bool
fn le<I>(self, other: I) -> bool
Iterator are lexicographically
less or equal to those of another. Read more1.5.0 · Source§fn gt<I>(self, other: I) -> bool
fn gt<I>(self, other: I) -> bool
Iterator are lexicographically
greater than those of another. Read more1.5.0 · Source§fn ge<I>(self, other: I) -> bool
fn ge<I>(self, other: I) -> bool
Iterator are lexicographically
greater than or equal to those of another. Read more1.82.0 · Source§fn is_sorted(self) -> bool
fn is_sorted(self) -> bool
1.82.0 · Source§fn is_sorted_by<F>(self, compare: F) -> bool
fn is_sorted_by<F>(self, compare: F) -> bool
1.82.0 · Source§fn is_sorted_by_key<F, K>(self, f: F) -> bool
fn is_sorted_by_key<F, K>(self, f: F) -> bool
Source§impl Not for BitBoard
Implements the Not trait for BitBoard, allowing the bitwise NOT operation !.
The bitwise NOT flips all bits in the BitBoard, effectively inverting the board state.
impl Not for BitBoard
Implements the Not trait for BitBoard, allowing the bitwise NOT operation !.
The bitwise NOT flips all bits in the BitBoard, effectively inverting the board state.