1
0
Fork 0

make bitboards public

This commit is contained in:
Paul-Nicolas Madelaine 2025-11-03 17:01:25 +01:00
parent bf6cc961dc
commit e8a4a5dffb
3 changed files with 28 additions and 20 deletions

View file

@ -1,19 +1,22 @@
//! Sets of squares.
use crate::board::*; use crate::board::*;
use std::iter::ExactSizeIterator; use std::iter::ExactSizeIterator;
use std::iter::FusedIterator; use std::iter::FusedIterator;
/// A set of squares.
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct Bitboard(pub(crate) u64); pub struct Bitboard(pub u64);
impl Bitboard { impl Bitboard {
#[inline] #[inline]
pub fn new() -> Self { pub const fn new() -> Self {
Self(0) Self(0)
} }
#[inline] #[inline]
pub fn is_empty(&self) -> bool { pub const fn is_empty(&self) -> bool {
self.0 == 0 self.0 == 0
} }
@ -38,7 +41,7 @@ impl Bitboard {
} }
#[inline] #[inline]
pub fn pop(&mut self) -> Option<Square> { pub const fn pop(&mut self) -> Option<Square> {
let Self(ref mut mask) = self; let Self(ref mut mask) = self;
let square = match mask { let square = match mask {
0 => None, 0 => None,
@ -54,7 +57,23 @@ impl Bitboard {
} }
#[inline] #[inline]
pub fn trans(&self, direction: Direction) -> Self { pub const fn contains(&self, square: Square) -> bool {
self.0 & (1 << square as u8) != 0
}
#[inline]
pub const fn remove(&mut self, _square: Square) {
todo!()
}
#[inline]
pub fn mirror(self) -> Bitboard {
let [a, b, c, d, e, f, g, h] = self.0.to_le_bytes();
Self(u64::from_le_bytes([h, g, f, e, d, c, b, a]))
}
#[inline]
pub(crate) fn trans(&self, direction: Direction) -> Self {
match direction { match direction {
Direction::North => Self(self.0 << 8), Direction::North => Self(self.0 << 8),
Direction::NorthEast => Self(self.0 << 9) & !File::A.bitboard(), Direction::NorthEast => Self(self.0 << 9) & !File::A.bitboard(),
@ -66,17 +85,6 @@ impl Bitboard {
Direction::NorthWest => Self(self.0 << 7) & !File::H.bitboard(), Direction::NorthWest => Self(self.0 << 7) & !File::H.bitboard(),
} }
} }
#[inline]
pub const fn contains(&self, square: Square) -> bool {
self.0 & (1 << square as u8) != 0
}
#[inline]
pub fn mirror(self) -> Bitboard {
let [a, b, c, d, e, f, g, h] = self.0.to_le_bytes();
Self(u64::from_le_bytes([h, g, f, e, d, c, b, a]))
}
} }
impl std::ops::BitOr for Bitboard { impl std::ops::BitOr for Bitboard {

View file

@ -155,7 +155,7 @@ impl File {
} }
#[inline] #[inline]
pub(crate) const fn bitboard(self) -> Bitboard { pub const fn bitboard(self) -> Bitboard {
Bitboard(0x0101010101010101 << (self as u8)) Bitboard(0x0101010101010101 << (self as u8))
} }
} }
@ -242,7 +242,7 @@ impl Rank {
} }
#[inline] #[inline]
pub(crate) const fn bitboard(self) -> Bitboard { pub const fn bitboard(self) -> Bitboard {
Bitboard(0xFF << ((self as u64) << 3)) Bitboard(0xFF << ((self as u64) << 3))
} }
} }
@ -326,7 +326,7 @@ impl Square {
} }
#[inline] #[inline]
pub(crate) const fn bitboard(self) -> Bitboard { pub const fn bitboard(self) -> Bitboard {
Bitboard(1 << self as u8) Bitboard(1 << self as u8)
} }

View file

@ -73,10 +73,10 @@
//! - etc. //! - etc.
pub(crate) mod array_vec; pub(crate) mod array_vec;
pub(crate) mod bitboard;
pub(crate) mod lookup; pub(crate) mod lookup;
pub(crate) mod magics; pub(crate) mod magics;
pub mod bitboard;
pub mod board; pub mod board;
pub mod position; pub mod position;
pub mod san; pub mod san;