[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:
parent
9ef53b76f5
commit
a6b98abb95
3 changed files with 32 additions and 1 deletions
|
@ -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)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
|
@ -4,4 +4,13 @@ mod library;
|
||||||
mod shifts;
|
mod shifts;
|
||||||
|
|
||||||
pub(crate) use bit_scanner::{LeadingBitScanner, TrailingBitScanner};
|
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()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
// Eryn Wells <eryn@erynwells.me>
|
// Eryn Wells <eryn@erynwells.me>
|
||||||
|
|
||||||
|
#[macro_use]
|
||||||
mod bitboard;
|
mod bitboard;
|
||||||
mod display;
|
mod display;
|
||||||
mod moves;
|
mod moves;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue