[bitboard, board] Replace ray_in_direction! macro with a function

This is simpler than writing a macro, at the expense of some overhead for calling
a function. But the Rust compiler might inline it anyway!

To support this change, implement BitBoard::first_occupied_square_direction, which
iterates a bitboard in a direction (i.e. leading or trailing) depending on the
core::Direction value passed to it.
This commit is contained in:
Eryn Wells 2025-06-30 15:37:35 -07:00
parent e3d17219ad
commit a904e4a5bb
2 changed files with 41 additions and 33 deletions

View file

@ -243,6 +243,18 @@ impl BitBoard {
TrailingBitScanner::new(self.0)
}
#[must_use]
pub fn first_occupied_square_direction(&self, direction: Direction) -> Option<Square> {
match direction {
Direction::North | Direction::NorthEast | Direction::NorthWest | Direction::East => {
self.first_occupied_square_trailing()
}
Direction::SouthEast | Direction::South | Direction::SouthWest | Direction::West => {
self.first_occupied_square_leading()
}
}
}
#[must_use]
pub fn first_occupied_square(&self, direction: &IterationDirection) -> Option<Square> {
match direction {