diff --git a/src/bitboard.rs b/src/bitboard.rs index b2d728b..c558257 100644 --- a/src/bitboard.rs +++ b/src/bitboard.rs @@ -1,19 +1,22 @@ +//! Sets of squares. + use crate::board::*; use std::iter::ExactSizeIterator; use std::iter::FusedIterator; +/// A set of squares. #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] -pub struct Bitboard(pub(crate) u64); +pub struct Bitboard(pub u64); impl Bitboard { #[inline] - pub fn new() -> Self { + pub const fn new() -> Self { Self(0) } #[inline] - pub fn is_empty(&self) -> bool { + pub const fn is_empty(&self) -> bool { self.0 == 0 } @@ -38,7 +41,7 @@ impl Bitboard { } #[inline] - pub fn pop(&mut self) -> Option { + pub const fn pop(&mut self) -> Option { let Self(ref mut mask) = self; let square = match mask { 0 => None, @@ -54,7 +57,23 @@ impl Bitboard { } #[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) { + self.0 &= !(1 << square as u8); + } + + #[inline] + pub const 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 { Direction::North => Self(self.0 << 8), Direction::NorthEast => Self(self.0 << 9) & !File::A.bitboard(), @@ -66,17 +85,6 @@ impl 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 { diff --git a/src/board.rs b/src/board.rs index 785fbcf..99732e6 100644 --- a/src/board.rs +++ b/src/board.rs @@ -161,7 +161,7 @@ impl File { } #[inline] - pub(crate) const fn bitboard(self) -> Bitboard { + pub const fn bitboard(self) -> Bitboard { Bitboard(0x0101010101010101 << (self as u8)) } } @@ -256,7 +256,7 @@ impl Rank { } #[inline] - pub(crate) const fn bitboard(self) -> Bitboard { + pub const fn bitboard(self) -> Bitboard { Bitboard(0xFF << ((self as u64) << 3)) } } @@ -340,7 +340,7 @@ impl Square { } #[inline] - pub(crate) const fn bitboard(self) -> Bitboard { + pub const fn bitboard(self) -> Bitboard { Bitboard(1 << self as u8) } diff --git a/src/lib.rs b/src/lib.rs index 6b5e3c5..7df0d27 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -73,10 +73,10 @@ //! - etc. pub(crate) mod array_vec; -pub(crate) mod bitboard; pub(crate) mod lookup; pub(crate) mod magics; +pub mod bitboard; pub mod board; pub mod position; pub mod san;