Belofte version 2.2.0
A promising chess program using the UCI or Winboard interface
board.h
Go to the documentation of this file.
1/*---------------------------------------------------------------------+
2 * File: board.h
3 * Project: part of belofte - A Promising Chess Program
4 * Author: yves
5 * SPDX-License-Identifier: GPL-2.0-only
6+----------------------------------------------------------------------*/
7
8#if !defined(BOARD_H)
9#define BOARD_H
10
11//-----------------------------------------------------------------------
12
13typedef std::vector<std::string> movesequence_t;
16typedef std::array<caselist_t ,tStatPiece::STAT_SIZE> piecepostbox_t;
17
18typedef
19 union boardData {
20 boardData(uint64_t uiValue): u_boardData(uiValue) {}
21 uint64_t u_boardData = 0ULL; // initialise all subsequent fields to 0
22 struct {
23 uint8_t boardFlags; // = bGameStage::ST_NOTSET && needCalcMinorPieces = true
24 /// 0b00001111
25 /// ^ 0 = NeedCalcMinorPieces (0x80 - 128)
26 /// ^ unused (0x40 - 64)
27 /// ^ unused (0x20 - 32)
28 /// ^ unused (0x10 - 16)
29 /// ^^^^ gameStage (0x0F - 0 to 15)
31 uint8_t whiteminor; // = 0; // updated through calcMinorPieces
32 uint8_t blackminor; // = 0; // updated through calcMinorPieces
36
37//-----------------------------------------------------------------------
38
39#if defined(__GNUC__)
40#pragma GCC diagnostic push
41#pragma GCC diagnostic ignored "-Weffc++"
42#endif
43
44/** board */
45class bBoard : public bBasicBoard {
46public:
47 explicit bBoard(bBoard const& b); // board with limited data
48 explicit bBoard(bBoard const& b, bMove& m); // board with including move history
49 explicit bBoard(bFen const& fen);
50 ~bBoard() override
51 {}
52
55 m_boardData = b.m_boardData.u_boardData;
56 m_whitePieces = b.m_whitePieces;
57 m_blackPieces = b.m_blackPieces;
58 m_variation = b.m_variation;
59 m_previousmoves = b.m_previousmoves;
60 return *this;
61 }
62
63 // no move ctor defined
64 bBoard& operator=(bBoard&& b) = delete;
65
66 void invertColours();
67
68 constexpr bGameStage getGameStage() const
69 { return static_cast<bGameStage>(m_boardData.s_boardData.boardFlags & 0x0F); }
70 inline void clearGameStage()
71 { setGameStage(bGameStage::ST_NOTSET); }
72 std::string getGameStageName() const;
73
74 void calcGameStage();
75
76 constexpr bool needCalcMinorPieces() const
77 { return m_boardData.s_boardData.boardFlags ^ 0x80; }
78 constexpr bool noNeedCalcMinorPieces() const
79 { return m_boardData.s_boardData.boardFlags & 0x80; }
81 { m_boardData.s_boardData.boardFlags &= ~(0x80); }
83 { m_boardData.s_boardData.boardFlags |= 0x80; }
84
85 void calcMinorPieces(bool const bForceRecalc);
86
87 constexpr bmove_t getMove() const
88 { return m_boardData.s_boardData.moveplayed; }
89 inline void clearMove()
90 { m_boardData.s_boardData.moveplayed = 0; }
91 inline void setMove(bmove_t const bmt)
92 { m_boardData.s_boardData.moveplayed = bmt; }
93
94 inline movesequence_t const& getPreviousMoves() const
95 { return m_previousmoves; }
96 inline void setPreviousMoves(movesequence_t const& v)
97 { m_previousmoves = v; }
98 inline movesequence_t const& getVariation() const
99 { return m_variation; }
100 inline void clearVariation()
101 { m_variation = {}; }
102 void setVariation(bBoard const& chldbrd);
103
104 boardInfo_t applyMove(bMove const& m) override;
105
106 operator std::string() const;
107
108protected:
109 friend class bPositionEvaluation; // for accessing m_..Pieces
110 friend class PosEvalPositionalBoard; // for accessing m_..Pieces
111 friend class bWhitePiece; // for accessing m_..Pieces
112 friend class bBlackPiece; // for accessing m_..Pieces
113
114private:
115 friend std::ostream& operator<<(std::ostream& os, bBoard const& bd);
116
117 inline void setGameStage(bGameStage const stage)
118 { m_boardData.s_boardData.boardFlags
119 = static_cast<uint8_t>((m_boardData.s_boardData.boardFlags & 0xF0)
120 | (static_cast<uint8_t>(stage) & 0x0F));
121 }
122
123 boardData_t m_boardData;
124
125 // postbox representation of board
126 piecepostbox_t m_whitePieces;
127 piecepostbox_t m_blackPieces;
128
129 movesequence_t m_variation; /// variation leading to score
130 movesequence_t m_previousmoves; /// movesequence to get here
131};
132
133#if defined(__GNUC__)
134#pragma GCC diagnostic pop
135#endif
136
137// --------------------------------------------------------------------
138
139#endif // defined BOARD_H
140
141// eof
union boardInfo boardInfo_t
uint32_t bmove_t
Definition belofte.h:101
uint8_t case_t
Definition belofte.h:99
union boardData boardData_t
std::vector< std::string > movesequence_t
Definition board.h:13
bGameStage
Definition board.h:14
@ ST_MATING
Definition board.h:15
@ ST_PAWNENDING
Definition board.h:15
@ ST_UNSPECIFIED
Definition board.h:14
@ ST_NOTSET
Definition board.h:14
@ ST_OPENING
Definition board.h:15
@ ST_ENDGAME
Definition board.h:15
std::array< caselist_t,tStatPiece::STAT_SIZE > piecepostbox_t
Definition board.h:16
bBasicBoard & operator=(bBasicBoard const &bb)
Definition basicboard.h:62
board
Definition board.h:45
void clearVariation()
Definition board.h:100
void setNeedCalcMinorPieces()
Definition board.h:80
friend class PosEvalPositionalBoard
Definition board.h:110
void invertColours()
invert colours update kingpos, update colour to move, castle rights, ...
Definition board.cpp:181
bBoard & operator=(bBoard const &b)
Definition board.h:53
void calcMinorPieces(bool const bForceRecalc)
Recalculate minor pieces, used for evaluation and end of game condition in case of less than 5 pieces...
Definition board.cpp:66
friend class bPositionEvaluation
Definition board.h:109
friend class bBlackPiece
Definition board.h:112
void clearGameStage()
Definition board.h:70
friend std::ostream & operator<<(std::ostream &os, bBoard const &bd)
print board
Definition board.cpp:272
void setVariation(bBoard const &chldbrd)
Definition board.cpp:225
constexpr bool needCalcMinorPieces() const
Definition board.h:76
void clearMove()
Definition board.h:89
boardInfo_t applyMove(bMove const &m) override
modification of board move is kept on previous board newboard does not have move stored and has flag ...
Definition board.cpp:215
void clearNeedCalcMinorPieces()
Definition board.h:82
constexpr bool noNeedCalcMinorPieces() const
Definition board.h:78
bBoard(bBoard const &b)
Copy board with limited board data, no board history.
Definition board.cpp:20
void setMove(bmove_t const bmt)
Definition board.h:91
movesequence_t const & getPreviousMoves() const
Definition board.h:94
movesequence_t const & getVariation() const
Definition board.h:98
constexpr bmove_t getMove() const
Definition board.h:87
std::string getGameStageName() const
Definition board.cpp:165
void calcGameStage()
calculate stage of game to assist in evaluation
Definition board.cpp:137
~bBoard() override
Definition board.h:50
void setPreviousMoves(movesequence_t const &v)
Definition board.h:96
constexpr bGameStage getGameStage() const
Definition board.h:68
bBoard & operator=(bBoard &&b)=delete
friend class bWhitePiece
Definition board.h:111
FEN string.
Definition fen.h:14
Definition move.h:13
case_t capturedcase
0b00001111 ^ 0 = NeedCalcMinorPieces (0x80 - 128) ^ unused (0x40 - 64) ^ unused (0x20 - 32) ^ unused ...
Definition board.h:30
uint8_t whiteminor
Definition board.h:31
uint8_t blackminor
Definition board.h:32
uint64_t u_boardData
Definition board.h:21
struct boardData::@346170310372102045372277064032203362166237127134 s_boardData
uint8_t boardFlags
Definition board.h:23
bmove_t moveplayed
Definition board.h:33
boardData(uint64_t uiValue)
Definition board.h:20