Commit graph

377 commits

Author SHA1 Message Date
424d348b2d WIP 2025-05-08 17:37:59 -07:00
091cc99cb3 WIP 2025-05-08 17:37:51 -07:00
d5cdf273c8 [bitboard] Fix some random clippy issues 2025-05-03 16:03:18 -07:00
867deafd13 [board] A ton of API refinements 2025-05-03 16:02:56 -07:00
99dd2d1be2 [board] Remove the Builder 2025-05-03 15:48:06 -07:00
b0c4039920 [board] Remove Board::new() 2025-05-02 15:42:06 -07:00
bb8d5a6aa3 [board] Replace Flags with castle::Rights 2025-05-02 15:41:45 -07:00
cd60a453aa [board] Replace active player and move properties on Board with MoveCounter instance 2025-05-02 15:18:37 -07:00
58cbe07136 [board] Implement PieceSet::mailbox() method to return a reference to its Mailbox 2025-05-02 15:05:39 -07:00
bf535f876a [board] Update call to BitBoard::occupied_squares to take an IterationDirection 2025-05-02 15:05:05 -07:00
0b100d5f14 [board] Remove Flags struct, replace it with Castle and supporting structs
Encapsulate castling rights within a small module. Castle provides the API to the
rest of the board package. Rights encodes the castling rights for each player.
Parameters defines castling parameters for each player.
2025-05-02 15:03:48 -07:00
9f2bfc0457 [board] Replace the length of the Builder::kings array with Color::NUM instead of constant 2 2025-05-02 14:49:16 -07:00
46b19ff616 [board] Implement Mailbox::from_iter as a reduce (aka fold) over the incoming iterator 2025-05-02 14:48:37 -07:00
72fd938238 [board] Implement Copy for Mailbox struct 2025-05-02 14:48:01 -07:00
c733342fca [board] Add MoveCounter struct to track current color, half move counter, and full move counter 2025-05-02 14:42:31 -07:00
7b0469d689 [bitboard] Replace separate methods for leading and trailing iteration
Add chessfriend_bitboard::IterationDirection
Make BitBoard::occupied_squares() take an IterationDirection and return an iterator
corresponding to the direction.
Do the same for ::first_occupied_square().
2025-05-02 14:28:31 -07:00
9f62996175 [bitboard] Return a copy of a BitBoard from BitBoard::ray() 2025-05-02 14:28:31 -07:00
53c637f424 [bitboard] Make BitBoard::EMPTY and BitBoard::FULL private; export BitBoard::full() 2025-05-02 14:23:29 -07:00
90657e3818 [position] Rewrite sight methods in terms of Board and pass BitBoard arguments by value 2024-07-13 12:08:20 -07:00
30188d478e [board] Convert &BitBoard to BitBoard for several Board methods
I don't think passing by reference buys much for BitBoard. So simplify the
logic and borrowing semantics to make these easier to work with.
2024-07-13 12:03:19 -07:00
7ec72035ae [board] Remove en passant test helper method 2024-07-13 12:01:01 -07:00
d221de700d [board] Copy edit and add new documentation to Board 2024-07-13 12:00:02 -07:00
c297e4cbfa [board] Replace implementation of Board::piece_on_square with a simpler one
Now that board has a Mailbox, the implementation of this routine can be greatly
simplified. Instead of needing to iterate through all BitBoards to find the
occupied square, just consult the mailbox.
2024-07-13 11:57:57 -07:00
3785502ea0 [board] Declare Board::flags() pub(crate) instead of pub 2024-07-13 11:56:31 -07:00
26ae79e17d [board] Remove explicit #[inline] from several Board methods
Trust the compiler to inline where appropriate, until I know otherwise.
2024-07-13 11:54:58 -07:00
7a46d52e8d [board] Make the flags and macros modules public 2024-07-13 11:54:00 -07:00
fb6d1ad2f0 [board] Make the display module public 2024-07-13 11:53:43 -07:00
a14cb30781 [board] Implement PieceSet::iter() as an iterator over its Mailbox 2024-07-13 11:53:16 -07:00
fff2e084b5 [board] Remove turbofish from PieceSet pipeline in Builder::build() 2024-07-13 11:52:50 -07:00
da4e2f1d50 [core] Use Color::default() instead of Color::White in Board::default() 2024-07-13 11:52:25 -07:00
90e33d1202 [board] Replace Pieces iterator with Mailbox::iter()
Mailbox can use a standard iterator because it's just a slice. So nice!
2024-07-13 11:52:02 -07:00
51de32fa0a [board] Update reference to PieceBitBoard → PieceSet
This isn't all of them...
2024-07-13 11:50:38 -07:00
f96fa79dc1 [position] Remove fen.rs 2024-07-13 08:14:33 -07:00
634f9e02f4 [board] Mailbox-related changes 2024-07-13 08:10:59 -07:00
ee51a13870 Rename Square::from_index → from_index_unchecked 2024-07-13 08:10:21 -07:00
c290f00b9e [board] fen declaration 2024-07-13 08:09:02 -07:00
e8c3d2b8db [board] Add documentation to the types in castle.rs 2024-07-13 08:08:48 -07:00
d9c2cfb90c [board] Copy fen.rs here from the position crate 2024-07-13 08:08:26 -07:00
3a2ead2668 [board] Replace Builder's BTreeMap with a Mailbox
More efficient and easier to work with. :)
2024-07-13 08:08:12 -07:00
7c65232c35 [core] Improve API of Shape and Color
Clean up type and method declarations by using better type spelling. Use more
standard method spelling for iterators. Implement some useful traits.
2024-07-13 07:34:50 -07:00
534c022981 [core] Add #[must_use] to several methods in coordinates 2024-07-13 07:21:21 -07:00
7e45e49502 [BitBoard] Build out the documentation 2024-07-13 07:20:18 -07:00
daf5c86792 [BitBoard] Clean up the API; implement some traits
Clean up the BitBoard API by renaming methods with simpler names.
run-help Redo
Redo the implementation of a couple methods to be more succinct.
2024-07-13 07:19:47 -07:00
480a009e63 [BitBoard] Address a bunch of rust-analyzer suggestions
Add #[must_use] to many methods
2024-07-13 07:17:43 -07:00
14ab669763 Clean up BitBoard's bit ops impl macros
Declare the `forward_ref` crate as a dependency (my first external dependency!)
and use it to clean up the infix, assign, and unary op impls. This crate
automatically implements A+&B, &A+B, and &A+&B for me.
2024-07-13 07:08:18 -07:00
2480ef25e9 Remove BitBoardBuilder
It's unused except for the macro, and BitBoard itself can be declared mutable,
and implements Copy and Clone. So, I don't think having a separate Builder type
helps much.
2024-07-13 07:05:57 -07:00
19feff9591 Solidify PieceSet and supporting types 2024-07-12 15:52:41 -07:00
b3c472fbce Fix some imports in the moves package
Castle and EnPassant moved to the board package. Reference these types there.
Add the board packages as a dependency to the moves package.
2024-04-26 09:50:42 -04:00
1d82d27f84 Move a whole bunch of stuff to the new chessfriend_board package 2024-04-25 13:28:24 -07:00
797606785e Empty board package 2024-04-25 09:32:27 -07:00