43 lines
1.0 KiB
C++
43 lines
1.0 KiB
C++
#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<Square> 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<Square> eps;
|
|
|
|
inline PieceType pieceType(const BitBoard &mask) const {
|
|
for (int i = 2; i < BB_NUM; i++) {
|
|
if ((*pieceBBs)[i] & mask) {
|
|
return static_cast<PieceType>(i);
|
|
}
|
|
}
|
|
|
|
// Should not happen
|
|
return static_cast<PieceType>(0);
|
|
}
|
|
};
|
|
|
|
#endif //CHESS_ENGINE_BOARDSTATE_HPP
|