8#if !defined(BASICBOARD_H)
11#define KingStartPosW 4
12#define KingStartPosB 60
57 : m_boardInfo{std::move(bb.m_boardInfo.u_boardInfo)}
58 , m_hash{std::move(bb.m_hash)}
59 { memcpy(m_fields, bb.m_fields,
sizeof(bb.m_fields)); }
68 : m_boardInfo{bb.m_boardInfo.u_boardInfo}
70 { memcpy(m_fields, bb.m_fields,
sizeof(bb.m_fields)); }
76 {
return m_boardInfo.s_boardInfo.ply; }
79 { m_boardInfo.s_boardInfo.ply = p; }
81 { ++m_boardInfo.s_boardInfo.ply; }
83 { --m_boardInfo.s_boardInfo.ply; }
90 {
return m_boardInfo.s_boardInfo.capturedpiece & 0x80; }
95 return ((m_boardInfo.s_boardInfo.capturedpiece >> 4) & 0x07);
104 {
return m_boardInfo.s_boardInfo.ply50moves; }
106 { m_boardInfo.s_boardInfo.ply50moves = p; }
108 { ++m_boardInfo.s_boardInfo.ply50moves; }
110 { m_boardInfo.s_boardInfo.ply50moves = 0; }
114 {
return m_boardInfo.s_boardInfo.flags & f; }
116 { m_boardInfo.s_boardInfo.flags |= 0x20; }
118 { m_boardInfo.s_boardInfo.flags |= 0x40; }
120 { m_boardInfo.s_boardInfo.flags &= ~(0x20); }
122 { m_boardInfo.s_boardInfo.flags &= ~(0x40); }
124 {
return m_boardInfo.s_boardInfo.flags & 0x20; }
126 {
return m_boardInfo.s_boardInfo.flags & 0x40; }
133 {
return m_boardInfo.s_boardInfo.flags & 0x10; }
135 { m_boardInfo.s_boardInfo.flags |= 0x10; }
137 { m_boardInfo.s_boardInfo.flags &= ~(0x10); }
140 {
return m_boardInfo.s_boardInfo.flags & 0x80; }
142 { m_boardInfo.s_boardInfo.flags |= 0x80; }
144 { m_boardInfo.s_boardInfo.flags &= ~(0x80); }
147 {
return static_cast<piece_t>(m_boardInfo.s_boardInfo.capturedpiece & 0x0F); }
149 { m_boardInfo.s_boardInfo.capturedpiece &= 0xF0;
150 m_boardInfo.s_boardInfo.capturedpiece |=
static_cast<uint8_t
>(p);
153 { m_boardInfo.s_boardInfo.capturedpiece &= 0xF0; }
157 {
return ((m_boardInfo.s_boardInfo.ply & 0x0001) == 0); }
159 {
return (m_boardInfo.s_boardInfo.ply & 0x0001); }
161 {
return (m_boardInfo.s_boardInfo.ply >> 1) + 1; }
164 return static_cast<side_t>((m_boardInfo.s_boardInfo.ply & 0x0001) + 1);
173 {
return m_fields[cf]; }
183 { m_fields[cf] = piece; }
185 { m_fields[cf] =
static_cast<piece_t>(piece); }
189 piece_t oldPiece = m_fields[ct];
190 m_fields[ct] = piece;
195 piece_t oldPiece = m_fields[ct];
202 {
return !m_fields[cf]; }
207 {
return m_boardInfo.s_boardInfo.whiteKing; }
209 {
return m_boardInfo.s_boardInfo.blackKing; }
222 {
return m_boardInfo.s_boardInfo.pieceCnt; }
228 { m_hash = newHash; }
232 {
return m_boardInfo; }
255 m_fields[cf] = piece;
256 if (piece ==
tPiece::W_KING) m_boardInfo.s_boardInfo.whiteKing = cf;
257 else if (piece ==
tPiece::B_KING) m_boardInfo.s_boardInfo.blackKing = cf;
262 { m_boardInfo.s_boardInfo.pieceCnt = n; }
264 { ++m_boardInfo.s_boardInfo.pieceCnt; }
266 { --m_boardInfo.s_boardInfo.pieceCnt; }
union boardInfo boardInfo_t
constexpr piece_t getPiece(case_t const cf) const
constexpr bool isNonSilent() const
void setCapturedPiece(piece_t p)
constexpr bool whiteToMove() const
void setBoardInfo(boardInfo_t boardInfo)
bBasicBoard & operator=(bBasicBoard &&)=delete
bBasicBoard & operator=(bBasicBoard const &)=delete
bBasicBoard(bBasicBoard &&bb)
void moveBlackKing(case_t const cf, case_t const ct)
void clearBlackHasCastled()
constexpr int16_t getMoveNumber() const
constexpr piece_t getPiece(column_t const iColumn, rank_t const iRank) const
boardInfo_t makeBoardMove(column_t const oldcol, rank_t const oldrank, column_t const newcol, rank_t const newrank)
apply move to check if in check only, board to be discarded as it will be in incomplete state,...
void movePiece(case_t const cf, case_t const ct, piece_t const np)
void restorePiece(case_t const cf, piece_t const op)
void setPly50Moves(movenum50_t const p)
boardInfo_t applyBlackMove(bMove const &m)
constexpr bool isFieldEmpty(case_t const cf) const
constexpr bool isFieldEmpty(column_t const iColumn, rank_t const iRank) const
constexpr bool blackHasCastled() const
void moveWhiteKing(case_t const cf, case_t const ct)
constexpr bool whiteHasCastled() const
constexpr bool hasCastleRights(uint8_t const f) const
boardInfo_t applyWhiteMove(bMove const &m)
constexpr bScore minimizing() const
void setEp(case_t const e)
set ep case, it will actually be stored as column only rank will be calculated based on side to move ...
void unApplyMove(bMove const &m, boardInfo_t const oldBoardInfo)
exact restoration of basic board using move details
void clearCapturedPiece()
std::string getHashStr() const
virtual boardInfo_t applyMove(bMove const &m)
play game move on board
void setHash(hashkey_t const newHash)
constexpr case_t getBlackKingPos() const
constexpr case_t getEp() const
void clearWhiteHasCastled()
void unMakeBoardMove(case_t const &cf, column_t const newcol, rank_t const newrank, boardInfo_t const oldBoardInfo)
undo makeBoardMove, restoring previous situation
void capturePieceOn(piece_t const capturedPiece, case_t const ct)
Clear castle flag if rook captured update piece counter, update hash, clear field.
boardInfo_t getBoardInfo() const
void clearPiece(case_t const cf)
constexpr hashkey_t getHash() const
constexpr case_t getWhiteKingPos() const
void setPiece(case_t const cf, uint8_t const piece)
piece_t setGetPiece(column_t const newcol, rank_t const newrank, piece_t const piece)
piece_t removePiece(column_t const newcol, rank_t const newrank)
void swapPiece(case_t const cf, piece_t const op, piece_t const np)
constexpr movenum50_t getPly50Moves() const
constexpr bool isEpSet() const
constexpr int8_t pieceCount() const
void clearCastleRights(uint8_t const f)
constexpr side_t getColourToMove() const
void setBlackHasCastled()
void calcHash()
Set hash based on board position, also calc pieces Byte 0: bits 4-6 capture count (masked) bit 7 play...
void setPieceCount(int8_t const n)
constexpr bool isInCheck() const
void setCastleRights(uint8_t const f)
bBasicBoard(bBasicBoard const &bb)
piece_t getPieceCtl(column_t const iColumn, rank_t const iRank) const
void setWhiteHasCastled()
void setPieceKU(case_t const cf, piece_t const piece)
void setPiece(case_t const cf, piece_t const piece)
constexpr column_t getEpColumn() const
void setPly(plynum_t const p)
constexpr plynum_t getPly() const
constexpr bool blackToMove() const
constexpr piece_t getCapturedPiece() const
static constexpr case_t coordToCase(column_t const c, rank_t const r)
struct boardInfo::@022254060033317030245227153321374007124317132060 s_boardInfo
piece_t getCapturedPiece() const
boardInfo(uint64_t uiValue)
uint8_t capturedpiece
4 castling bits, plus incheck flag and capture move
void setCapturedPiece(piece_t p)