From 758a3d95fc5d6a60f657e28e75903fe75391cd8c Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Tue, 26 Dec 2023 11:25:27 -0700 Subject: [PATCH] [board] Reorganize bitboard and position modules and export some symbols from the crate Move position.rs to the position module and create a mod.rs. Do the same for bitboard.rs in the bitboard modules. Export Color, Piece, Position, and Square and use crate::Thing directly instead of referring to the symbol in the nested modules. --- board/src/{ => bitboard}/bitboard.rs | 8 +++----- board/src/bitboard/mod.rs | 5 +++++ board/src/lib.rs | 4 ++++ board/src/piece.rs | 2 +- board/src/position/mod.rs | 5 +++++ board/src/position/pieces.rs | 10 +++++----- board/src/{ => position}/position.rs | 16 +++++++++------- 7 files changed, 32 insertions(+), 18 deletions(-) rename board/src/{ => bitboard}/bitboard.rs (98%) create mode 100644 board/src/bitboard/mod.rs create mode 100644 board/src/position/mod.rs rename board/src/{ => position}/position.rs (94%) diff --git a/board/src/bitboard.rs b/board/src/bitboard/bitboard.rs similarity index 98% rename from board/src/bitboard.rs rename to board/src/bitboard/bitboard.rs index 71a5df9..cbdaf1c 100644 --- a/board/src/bitboard.rs +++ b/board/src/bitboard/bitboard.rs @@ -1,9 +1,7 @@ // Eryn Wells -mod bit_scanner; - -use self::bit_scanner::BitScanner; -use crate::square::Square; +use super::BitScanner; +use crate::Square; use std::fmt; use std::ops::{BitAnd, BitOr, Not}; @@ -154,7 +152,7 @@ impl BitOr<&BitBoard> for BitBoard { #[cfg(test)] mod tests { use super::*; - use crate::square::Square; + use crate::Square; #[test] fn is_empty() { diff --git a/board/src/bitboard/mod.rs b/board/src/bitboard/mod.rs new file mode 100644 index 0000000..34d2ce4 --- /dev/null +++ b/board/src/bitboard/mod.rs @@ -0,0 +1,5 @@ +mod bit_scanner; +mod bitboard; + +pub(crate) use self::bit_scanner::BitScanner; +pub(crate) use self::bitboard::BitBoard; diff --git a/board/src/lib.rs b/board/src/lib.rs index 722899f..b8f7973 100644 --- a/board/src/lib.rs +++ b/board/src/lib.rs @@ -3,3 +3,7 @@ mod neighbor; mod piece; mod position; mod square; + +pub use piece::{Color, Piece}; +pub use position::Position; +pub use square::Square; diff --git a/board/src/piece.rs b/board/src/piece.rs index 36408ef..50db325 100644 --- a/board/src/piece.rs +++ b/board/src/piece.rs @@ -1,6 +1,6 @@ // Eryn Wells -use crate::square::Square; +use crate::Square; #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)] pub enum Color { diff --git a/board/src/position/mod.rs b/board/src/position/mod.rs new file mode 100644 index 0000000..8ba6c31 --- /dev/null +++ b/board/src/position/mod.rs @@ -0,0 +1,5 @@ +mod pieces; +mod position; + +pub use pieces::Pieces; +pub use position::Position; diff --git a/board/src/position/pieces.rs b/board/src/position/pieces.rs index bfad6e1..b1130f5 100644 --- a/board/src/position/pieces.rs +++ b/board/src/position/pieces.rs @@ -1,10 +1,9 @@ // Eryn Wells +use super::Position; use crate::bitboard::BitBoard; use crate::piece::{Color, Piece, PlacedPiece, Shape}; -use crate::position::Position; -use crate::square::Square; -use std::collections::HashSet; +use crate::Square; pub struct Pieces<'a> { color: Color, @@ -89,8 +88,9 @@ impl<'a> Iterator for Pieces<'a> { mod tests { use super::*; use crate::piece::{Color, Piece, Shape}; - use crate::position::Position; - use crate::square::Square; + use crate::Position; + use crate::Square; + use std::collections::HashSet; fn square_at(sq: &str) -> Square { Square::from_algebraic_string(sq).expect(sq) diff --git a/board/src/position.rs b/board/src/position/position.rs similarity index 94% rename from board/src/position.rs rename to board/src/position/position.rs index d795b7d..a578b72 100644 --- a/board/src/position.rs +++ b/board/src/position/position.rs @@ -1,11 +1,9 @@ // Eryn Wells -mod pieces; - -use self::pieces::Pieces; +use super::Pieces; use crate::bitboard::BitBoard; -use crate::square::Square; use crate::piece::{Color, Piece, PiecePlacementError}; +use crate::Square; use std::fmt; use std::fmt::Write; @@ -21,7 +19,7 @@ pub struct Position { } impl Position { - fn empty() -> Position { + pub fn empty() -> Position { Position { color_to_move: Color::White, pieces_per_color: [BitBoard::empty(), BitBoard::empty()], @@ -76,7 +74,11 @@ impl Position { } } - fn place_piece(&mut self, piece: &Piece, square: &Square) -> Result<(), PiecePlacementError> { + pub fn place_piece( + &mut self, + piece: &Piece, + square: &Square, + ) -> Result<(), PiecePlacementError> { let bitboard = self.bitboard_for_piece_mut(piece); if bitboard.has_piece_at(&square) { @@ -96,7 +98,7 @@ impl Position { &mut self.pieces_per_type[piece.color as usize][piece.shape as usize] } - fn pieces(&self, color: Color) -> Pieces { + pub fn pieces(&self, color: Color) -> Pieces { Pieces::new(&self, color) } }