Belofte version 2.1.9
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
53 // no move ctor nor assignment defined
54 bBoard& operator=(bBoard const& b) = delete;
55 bBoard& operator=(bBoard&& b) = delete;
56
57 void invertColours();
58
59 constexpr bGameStage getGameStage() const
60 { return static_cast<bGameStage>(m_boardData.s_boardData.boardFlags & 0x0F); }
61 inline void clearGameStage()
62 { setGameStage(bGameStage::ST_NOTSET); }
63 std::string getGameStageName() const;
64
65 void calcGameStage();
66
67 constexpr bool needCalcMinorPieces() const
68 { return m_boardData.s_boardData.boardFlags ^ 0x80; }
69 constexpr bool noNeedCalcMinorPieces() const
70 { return m_boardData.s_boardData.boardFlags & 0x80; }
72 { m_boardData.s_boardData.boardFlags &= ~(0x80); }
74 { m_boardData.s_boardData.boardFlags |= 0x80; }
75
76 void calcMinorPieces(bool const bForceRecalc = false);
77
78 constexpr bmove_t getMove() const
79 { return m_boardData.s_boardData.moveplayed; }
80 inline void clearMove()
81 { m_boardData.s_boardData.moveplayed = 0; }
82 inline void setMove(bmove_t const bmt)
83 { m_boardData.s_boardData.moveplayed = bmt; }
84
85 inline movesequence_t const& getPreviousMoves() const
86 { return m_previousmoves; }
87 inline void setPreviousMoves(movesequence_t const& v)
88 { m_previousmoves = v; }
89 inline movesequence_t const& getVariation() const
90 { return m_variation; }
91 inline void clearVariation()
92 { m_variation = {}; }
93 void setVariation(bBoard const& chldbrd);
94
95 boardInfo_t applyMove(bMove const& m) override;
96
97 operator std::string() const;
98
99protected:
100 friend class bPositionEvaluation; // for accessing m_..Pieces
101 friend class PosEvalPositionalBoard; // for accessing m_..Pieces
102 friend class bWhitePiece; // for accessing m_..Pieces
103 friend class bBlackPiece; // for accessing m_..Pieces
104
105private:
106 friend std::ostream& operator<<(std::ostream& os, bBoard const& dt);
107
108 inline void setGameStage(bGameStage const stage)
109 { m_boardData.s_boardData.boardFlags
110 = static_cast<uint8_t>((m_boardData.s_boardData.boardFlags & 0xF0)
111 | (static_cast<uint8_t>(stage) & 0x0F));
112 }
113
114 boardData_t m_boardData;
115
116 // postbox representation of board
117 piecepostbox_t m_whitePieces;
118 piecepostbox_t m_blackPieces;
119
120 movesequence_t m_variation; /// variation leading to score
121 movesequence_t m_previousmoves; /// movesequence to get here
122};
123
124#if defined(__GNUC__)
125#pragma GCC diagnostic pop
126#endif
127
128// --------------------------------------------------------------------
129
130#endif // defined BOARD_H
131
132// eof
union boardInfo boardInfo_t
uint32_t bmove_t
Definition belofte.h:98
uint8_t case_t
Definition belofte.h:96
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
board
Definition board.h:45
void clearVariation()
Definition board.h:91
void setNeedCalcMinorPieces()
Definition board.h:71
friend class PosEvalPositionalBoard
Definition board.h:101
bBoard & operator=(bBoard const &b)=delete
void invertColours()
invert colours update kingpos, update colour to move, castle rights, ...
Definition board.cpp:183
friend class bPositionEvaluation
Definition board.h:100
friend class bBlackPiece
Definition board.h:103
void clearGameStage()
Definition board.h:61
void setVariation(bBoard const &chldbrd)
Definition board.cpp:227
constexpr bool needCalcMinorPieces() const
Definition board.h:67
void clearMove()
Definition board.h:80
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:217
void calcMinorPieces(bool const bForceRecalc=false)
Recalculate minor pieces, used for evaluation and end of game condition in case of less than 5 pieces...
Definition board.cpp:68
void clearNeedCalcMinorPieces()
Definition board.h:73
constexpr bool noNeedCalcMinorPieces() const
Definition board.h:69
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:82
movesequence_t const & getPreviousMoves() const
Definition board.h:85
movesequence_t const & getVariation() const
Definition board.h:89
friend std::ostream & operator<<(std::ostream &os, bBoard const &dt)
print board
Definition board.cpp:274
constexpr bmove_t getMove() const
Definition board.h:78
std::string getGameStageName() const
Definition board.cpp:167
void calcGameStage()
calculate stage of game to assist in evaluation
Definition board.cpp:139
~bBoard() override
Definition board.h:50
void setPreviousMoves(movesequence_t const &v)
Definition board.h:87
constexpr bGameStage getGameStage() const
Definition board.h:59
bBoard & operator=(bBoard &&b)=delete
friend class bWhitePiece
Definition board.h:102
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
uint8_t boardFlags
Definition board.h:23
bmove_t moveplayed
Definition board.h:33
boardData(uint64_t uiValue)
Definition board.h:20
struct boardData::@237243122373301271065257317021373046377133261360 s_boardData