32#include <magic_enum/magic_enum.hpp>
54 consteval Pieces() noexcept = default;
87 [[nodiscard]]
constexpr auto operator==(
const Pieces&)
const noexcept ->
bool =
default;
180 case PieceType::Knight:
return knights;
181 case PieceType::Bishop:
return bishops;
182 case PieceType::Rook :
return rooks;
183 case PieceType::Queen :
return queens;
184 case PieceType::King :
return king;
185 case PieceType::Pawn : [[fallthrough]];
194 case PieceType::Knight:
return knights;
195 case PieceType::Bishop:
return bishops;
196 case PieceType::Rook :
return rooks;
197 case PieceType::Queen :
return queens;
198 case PieceType::King :
return king;
199 case PieceType::Pawn : [[fallthrough]];
221 assert(std::cmp_equal(
king.count(), 1));
227 -> std::optional<PieceType>
232 static constexpr auto allTypes = magic_enum::enum_values<PieceType>();
234 if (
const auto found = std::ranges::find_if(
236 [
this, index = square.index()](
const PieceType type) {
237 return get_type(type).test(index);
239 found != allTypes.end()) {
253 const auto idx = square.index();
256 assert(not
king.test(idx));
274 .transform([move,
this](
const PieceType type) {
275 get_type(move.piece()).unset(move.from());
277 return std::monostate { };
279 .or_else([move, movementMask, ourColor,
this] {
280 get_type(move.piece()) ^= movementMask;
282 if (move.is_castling()) {
283 const auto castleMask = move.to().is_queenside()
291 return std::make_optional(std::monostate { });
constexpr auto DARK_SQUARES
constexpr auto queenside_castle_rook_pos_mask(const Color side) noexcept -> Bitboard
constexpr auto knights(const Color color) noexcept -> Bitboard
constexpr auto bishops(const Color color) noexcept -> Bitboard
constexpr auto get(const File file) noexcept -> Bitboard
constexpr auto pawns(const Color color) noexcept -> Bitboard
constexpr auto king(const Color color) noexcept -> Bitboard
constexpr auto queen(const Color color) noexcept -> Bitboard
constexpr auto LIGHT_SQUARES
constexpr auto rooks(const Color color) noexcept -> Bitboard
constexpr auto kingside_castle_rook_pos_mask(const Color side) noexcept -> Bitboard
constexpr auto vertical(Bitboard board) noexcept -> Bitboard
constexpr auto any() const noexcept -> bool
static constexpr auto from_square(Square square) noexcept -> Bitboard
constexpr Pieces(Color color) noexcept
constexpr auto free() const noexcept -> Bitboard
constexpr auto get_type(PieceType type) noexcept -> Bitboard &
constexpr auto has_bishop_pair() const noexcept -> bool
constexpr void capture_at(Square square) noexcept
constexpr auto operator==(const Pieces &) const noexcept -> bool=default
constexpr void refresh_occupied() noexcept
constexpr void our_move(moves::Move move, Color ourColor) noexcept
constexpr auto get_piece_on(Square square) const noexcept -> std::optional< PieceType >
constexpr void vertical_flip() noexcept
constexpr auto is_file_half_open(File file) const noexcept -> bool
consteval Pieces() noexcept=default
constexpr auto get_king_location() const noexcept -> Square
static constexpr auto from_index(BitboardIndex index) noexcept -> Square