diff --git a/src/bitboard.rs b/src/bitboard.rs index b2d728b..a36fd0e 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) { + 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 { 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 2cc880e..2911c56 100644 --- a/src/board.rs +++ b/src/board.rs @@ -155,7 +155,7 @@ impl File { } #[inline] - pub(crate) const fn bitboard(self) -> Bitboard { + pub const fn bitboard(self) -> Bitboard { Bitboard(0x0101010101010101 << (self as u8)) } } @@ -242,7 +242,7 @@ impl Rank { } #[inline] - pub(crate) const fn bitboard(self) -> Bitboard { + pub const fn bitboard(self) -> Bitboard { Bitboard(0xFF << ((self as u64) << 3)) } } @@ -326,7 +326,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;