#ifndef CHESS_ENGINE_BOARDSTATE_HPP #define CHESS_ENGINE_BOARDSTATE_HPP #include "Piece.hpp" #include "BitBoard.hpp" #include "Board.hpp" #define BB_NUM 8 struct BoardState { BoardState(const BitBoard (*const pieceBBs)[8], const BitBoard occupiedBB, const PieceColor turn, const CastlingRights cr, const std::optional eps) : pieceBBs(pieceBBs), occupiedBB(occupiedBB), turn(turn), cr(cr), eps(eps) { } const BitBoard (*const pieceBBs)[8]; const BitBoard occupiedBB; const PieceColor turn; const CastlingRights cr; const std::optional eps; inline PieceType pieceType(const BitBoard &mask) const { for (int i = 2; i < BB_NUM; i++) { if ((*pieceBBs)[i] & mask) { return static_cast(i); } } // Should not happen return static_cast(0); } }; #endif //CHESS_ENGINE_BOARDSTATE_HPP