[board, core, bitboard] Clean up casts between Rank, File and BitBoard
Let BitBoard::rank and BitBoard::file take a Rank and File directly, instead of a u8 by reference. And then make the Rank/File::as_index const and return a value rather than a reference. All this allows you to convert between Rank, File, and BitBoard at compile tile (i.e. as a const method) rather than needing to do runtime stuff.
This commit is contained in:
parent
588f049290
commit
3684e9b425
3 changed files with 24 additions and 25 deletions
|
@ -58,16 +58,12 @@ impl BitBoard {
|
|||
BitBoard(bits)
|
||||
}
|
||||
|
||||
// TODO: Is &u8 really necessary here?
|
||||
pub fn rank(rank: &u8) -> BitBoard {
|
||||
debug_assert!(*rank < 8);
|
||||
library::RANKS[*rank as usize]
|
||||
pub const fn rank(rank: Rank) -> BitBoard {
|
||||
library::RANKS[rank.as_index()]
|
||||
}
|
||||
|
||||
// TODO: Is &u8 really necessary here?
|
||||
pub fn file(file: &u8) -> BitBoard {
|
||||
debug_assert!(*file < 8);
|
||||
library::FILES[*file as usize]
|
||||
pub const fn file(file: File) -> BitBoard {
|
||||
library::FILES[file.as_index()]
|
||||
}
|
||||
|
||||
pub fn ray(sq: Square, dir: Direction) -> BitBoard {
|
||||
|
@ -313,7 +309,7 @@ impl From<BitBoard> for u64 {
|
|||
|
||||
impl From<File> for BitBoard {
|
||||
fn from(value: File) -> Self {
|
||||
library::FILES[*value.as_index() as usize]
|
||||
library::FILES[value.as_index()]
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -325,7 +321,7 @@ impl From<Option<Square>> for BitBoard {
|
|||
|
||||
impl From<Rank> for BitBoard {
|
||||
fn from(value: Rank) -> Self {
|
||||
library::FILES[*value.as_index() as usize]
|
||||
library::FILES[value.as_index()]
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -466,21 +462,24 @@ mod tests {
|
|||
#[test]
|
||||
#[ignore]
|
||||
fn display_and_debug() {
|
||||
let bb = BitBoard::file(&0) | BitBoard::file(&3) | BitBoard::rank(&7) | BitBoard::rank(&4);
|
||||
let bb = BitBoard::file(File::A)
|
||||
| BitBoard::file(File::D)
|
||||
| BitBoard::rank(Rank::FIVE)
|
||||
| BitBoard::rank(Rank::EIGHT);
|
||||
println!("{}", &bb);
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[allow(clippy::unreadable_literal)]
|
||||
fn rank() {
|
||||
assert_eq!(BitBoard::rank(&0).0, 0xFF, "Rank 1");
|
||||
assert_eq!(BitBoard::rank(&1).0, 0xFF00, "Rank 2");
|
||||
assert_eq!(BitBoard::rank(&2).0, 0xFF0000, "Rank 3");
|
||||
assert_eq!(BitBoard::rank(&3).0, 0xFF000000, "Rank 4");
|
||||
assert_eq!(BitBoard::rank(&4).0, 0xFF00000000, "Rank 5");
|
||||
assert_eq!(BitBoard::rank(&5).0, 0xFF0000000000, "Rank 6");
|
||||
assert_eq!(BitBoard::rank(&6).0, 0xFF000000000000, "Rank 7");
|
||||
assert_eq!(BitBoard::rank(&7).0, 0xFF00000000000000, "Rank 8");
|
||||
assert_eq!(BitBoard::rank(Rank::ONE).0, 0xFF, "Rank 1");
|
||||
assert_eq!(BitBoard::rank(Rank::TWO).0, 0xFF00, "Rank 2");
|
||||
assert_eq!(BitBoard::rank(Rank::THREE).0, 0xFF0000, "Rank 3");
|
||||
assert_eq!(BitBoard::rank(Rank::FOUR).0, 0xFF000000, "Rank 4");
|
||||
assert_eq!(BitBoard::rank(Rank::FIVE).0, 0xFF00000000, "Rank 5");
|
||||
assert_eq!(BitBoard::rank(Rank::SIX).0, 0xFF0000000000, "Rank 6");
|
||||
assert_eq!(BitBoard::rank(Rank::SEVEN).0, 0xFF000000000000, "Rank 7");
|
||||
assert_eq!(BitBoard::rank(Rank::EIGHT).0, 0xFF00000000000000, "Rank 8");
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue