Remove BitBoardBuilder
It's unused except for the macro, and BitBoard itself can be declared mutable, and implements Copy and Clone. So, I don't think having a separate Builder type helps much.
This commit is contained in:
parent
19feff9591
commit
2480ef25e9
2 changed files with 17 additions and 35 deletions
|
@ -355,26 +355,6 @@ impl Not for &BitBoard {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct BitBoardBuilder(BitBoard);
|
|
||||||
|
|
||||||
impl BitBoardBuilder {
|
|
||||||
pub const fn empty() -> BitBoardBuilder {
|
|
||||||
BitBoardBuilder(BitBoard::empty())
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn new(bits: u64) -> BitBoardBuilder {
|
|
||||||
BitBoardBuilder(BitBoard::new(bits))
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn square(mut self, square: Square) -> BitBoardBuilder {
|
|
||||||
self.0.set_square(square);
|
|
||||||
self
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn build(&self) -> BitBoard {
|
|
||||||
self.0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
|
@ -453,18 +433,18 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn xor() {
|
fn xor() {
|
||||||
let a = bitboard![C5, G7];
|
let a = bitboard![C5 G7];
|
||||||
let b = bitboard![B5, G7, H3];
|
let b = bitboard![B5 G7 H3];
|
||||||
|
|
||||||
assert_eq!(a ^ b, bitboard![B5, C5, H3]);
|
assert_eq!(a ^ b, bitboard![B5 C5 H3]);
|
||||||
assert_eq!(a ^ BitBoard::empty(), a);
|
assert_eq!(a ^ BitBoard::empty(), a);
|
||||||
assert_eq!(BitBoard::empty() ^ BitBoard::empty(), BitBoard::empty());
|
assert_eq!(BitBoard::empty() ^ BitBoard::empty(), BitBoard::empty());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn bitand_assign() {
|
fn bitand_assign() {
|
||||||
let mut a = bitboard![C5, G7];
|
let mut a = bitboard![C5 G7];
|
||||||
let b = bitboard![B5, G7, H3];
|
let b = bitboard![B5 G7 H3];
|
||||||
|
|
||||||
a &= b;
|
a &= b;
|
||||||
|
|
||||||
|
@ -473,12 +453,12 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn bitor_assign() {
|
fn bitor_assign() {
|
||||||
let mut a = bitboard![C5, G7];
|
let mut a = bitboard![C5 G7];
|
||||||
let b = bitboard![B5, G7, H3];
|
let b = bitboard![B5 G7 H3];
|
||||||
|
|
||||||
a |= b;
|
a |= b;
|
||||||
|
|
||||||
assert_eq!(a, bitboard![B5, C5, G7, H3]);
|
assert_eq!(a, bitboard![B5 C5 G7 H3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -489,11 +469,11 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn first_occupied_squares() {
|
fn first_occupied_squares() {
|
||||||
let bb = bitboard![A8, E1];
|
let bb = bitboard![A8 E1];
|
||||||
assert_eq!(bb.first_occupied_square(), Some(Square::A8));
|
assert_eq!(bb.first_occupied_square(), Some(Square::A8));
|
||||||
assert_eq!(bb.first_occupied_square_trailing(), Some(Square::E1));
|
assert_eq!(bb.first_occupied_square_trailing(), Some(Square::E1));
|
||||||
|
|
||||||
let bb = bitboard![D6, E7, F8];
|
let bb = bitboard![D6 E7 F8];
|
||||||
assert_eq!(bb.first_occupied_square_trailing(), Some(Square::D6));
|
assert_eq!(bb.first_occupied_square_trailing(), Some(Square::D6));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,15 +5,17 @@ mod bitboard;
|
||||||
mod library;
|
mod library;
|
||||||
mod shifts;
|
mod shifts;
|
||||||
|
|
||||||
pub use bitboard::{BitBoard, BitBoardBuilder};
|
pub use bitboard::BitBoard;
|
||||||
|
|
||||||
pub(crate) use bit_scanner::{LeadingBitScanner, TrailingBitScanner};
|
pub(crate) use bit_scanner::{LeadingBitScanner, TrailingBitScanner};
|
||||||
|
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
macro_rules! bitboard {
|
macro_rules! bitboard {
|
||||||
($($sq:ident),* $(,)?) => {
|
($($sq:ident)* $(,)?) => {
|
||||||
$crate::BitBoardBuilder::empty()
|
{
|
||||||
$(.square(chessfriend_core::Square::$sq))*
|
let mut bitboard = $crate::BitBoard::empty();
|
||||||
.build()
|
$(bitboard.set(chessfriend_core::Square::$sq);)*
|
||||||
|
bitboard
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue