[board] Create a bitboard! macro and BitBoardBuilder

The Builder enables cleanly building a BitBoard out of squares.
The macro lets you create a BitBoard from a simple list of coordinates:

bitboard!(A1, B2, C3, D4, …)
This commit is contained in:
Eryn Wells 2024-01-15 17:17:34 -08:00
parent 9ef53b76f5
commit a6b98abb95
3 changed files with 32 additions and 1 deletions

View file

@ -188,6 +188,27 @@ 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)]
mod tests {
use super::*;

View file

@ -4,4 +4,13 @@ mod library;
mod shifts;
pub(crate) use bit_scanner::{LeadingBitScanner, TrailingBitScanner};
pub(crate) use bitboard::BitBoard;
pub(crate) use bitboard::{BitBoard, BitBoardBuilder};
#[macro_export]
macro_rules! bitboard {
($($sq:ident),*) => {
$crate::bitboard::BitBoardBuilder::empty()
$(.square($crate::Square::$sq))*
.build()
};
}

View file

@ -1,5 +1,6 @@
// Eryn Wells <eryn@erynwells.me>
#[macro_use]
mod bitboard;
mod display;
mod moves;