@@ -23,7 +23,7 @@ ChessBoard::ChessBoard() {
2323 memset (&structureEval, 0 , sizeof (_Tboard));
2424 if ((chessboard[SIDETOMOVE_IDX] = loadFen (fenString)) == 2 ) {
2525 fatal (" Bad FEN position format " , fenString);
26- std::_Exit (1 );
26+ std::exit (1 );
2727 }
2828}
2929
@@ -45,23 +45,26 @@ int ChessBoard::getPieceAt(int side, u64 bitmapPos) {
4545
4646void ChessBoard::makeZobristKey () {
4747 chessboard[ZOBRISTKEY_IDX] = 0 ;
48+
4849 for (int u = 0 ; u < 12 ; u++) {
49- u64 c = chessboard[u];
50- while (c) {
51- int position = BITScanForward (c);
50+ for (u64 c = chessboard[u]; c; RESET_LSB (c)) {
51+ const int position = BITScanForward (c);
5252 updateZobristKey (u, position);
53- RESET_LSB (c);
5453 }
5554 }
56- if (chessboard[ENPASSANT_IDX] != NO_ENPASSANT) {
57- updateZobristKey (ENPASSANT_IDX, chessboard[ENPASSANT_IDX]);
55+
56+
57+ for (u64 x2 = chessboard[RIGHT_CASTLE_IDX]; x2; RESET_LSB (x2)) {
58+ const int position = BITScanForward (x2);
59+ updateZobristKey (RIGHT_CASTLE_IDX, position);// 12
5860 }
59- u64 x2 = chessboard[RIGHT_CASTLE_IDX];
60- while (x2) {
61- int position = BITScanForward (x2);
62- updateZobristKey (14 , position);
63- RESET_LSB (x2);
61+
62+ if (chessboard[ENPASSANT_IDX] != NO_ENPASSANT) {
63+ updateZobristKey (ENPASSANT_IDX, chessboard[ENPASSANT_IDX]);// 13
6464 }
65+
66+ updateZobristKey (SIDETOMOVE_IDX, getSide ()); // 14
67+
6568}
6669
6770
@@ -78,15 +81,16 @@ int ChessBoard::getPieceByChar(char c) {
7881}
7982
8083
81- void ChessBoard::display () {
84+ void ChessBoard::display () const {
8285 cout << " \n a b c d e f g h" ;
8386 for (int t = 0 ; t <= 63 ; t++) {
8487 char x = ' ' ;
8588 if (t % 8 == 0 ) {
8689 cout << " \n ----+---+---+---+---+---+---+----\n " ;
8790 cout << " " << 8 - RANK_AT[t] << " | " ;
8891 }
89- x = (x = (x = FEN_PIECE[getPieceAt<WHITE>(POW2[63 - t])]) != ' -' ? x : FEN_PIECE[getPieceAt<BLACK>(POW2[63 - t])]) == ' -' ? ' ' : x;
92+ x = (x = (x = FEN_PIECE[getPieceAt<WHITE>(POW2[63 - t])]) != ' -' ? x : FEN_PIECE[getPieceAt<BLACK>(
93+ POW2[63 - t])]) == ' -' ? ' ' : x;
9094 x != ' ' ? cout << x : POW2[t] & WHITE_SQUARES ? cout << " " : cout << " ." ;
9195 cout << " | " ;
9296 };
@@ -159,7 +163,8 @@ string ChessBoard::boardToFen() const {
159163 fen.append (" -" );
160164 } else {
161165 fen.append (" " );
162- chessboard[SIDETOMOVE_IDX] ? fen.append (BOARD[chessboard[ENPASSANT_IDX] + 8 ]) : fen.append (BOARD[chessboard[ENPASSANT_IDX] - 8 ]);
166+ chessboard[SIDETOMOVE_IDX] ? fen.append (BOARD[chessboard[ENPASSANT_IDX] + 8 ]) : fen.append (
167+ BOARD[chessboard[ENPASSANT_IDX] - 8 ]);
163168 }
164169 fen.append (" 0 1" );
165170 return fen;
@@ -171,7 +176,7 @@ char ChessBoard::decodeBoard(string a) {
171176 return i;
172177 }
173178 }
174- cout << " \n " << a << endl ;
179+ error (a) ;
175180 ASSERT (0 );
176181 return -1 ;
177182}
@@ -232,22 +237,22 @@ int ChessBoard::loadFen(string fen) {
232237 switch (castle.at (e)) {
233238 case ' K' :
234239 updateZobristKey (RIGHT_CASTLE_IDX, 4 );
235- ASSERT (BITScanForward ( 4 == RIGHT_KING_CASTLE_WHITE_MASK));
240+ ASSERT (4 == BITScanForward ( RIGHT_KING_CASTLE_WHITE_MASK));
236241 chessboard[RIGHT_CASTLE_IDX] |= RIGHT_KING_CASTLE_WHITE_MASK;
237242 break ;
238243 case ' k' :
239244 updateZobristKey (RIGHT_CASTLE_IDX, 6 );
240- ASSERT (BITScanForward ( 6 == RIGHT_KING_CASTLE_BLACK_MASK));
245+ ASSERT (6 == BITScanForward ( RIGHT_KING_CASTLE_BLACK_MASK));
241246 chessboard[RIGHT_CASTLE_IDX] |= RIGHT_KING_CASTLE_BLACK_MASK;
242247 break ;
243248 case ' Q' :
244249 updateZobristKey (RIGHT_CASTLE_IDX, 5 );
245- ASSERT (BITScanForward ( 5 == RIGHT_QUEEN_CASTLE_WHITE_MASK));
250+ ASSERT (5 == BITScanForward ( RIGHT_QUEEN_CASTLE_WHITE_MASK));
246251 chessboard[RIGHT_CASTLE_IDX] |= RIGHT_QUEEN_CASTLE_WHITE_MASK;
247252 break ;
248253 case ' q' :
249254 updateZobristKey (RIGHT_CASTLE_IDX, 7 );
250- ASSERT (BITScanForward ( 7 == RIGHT_QUEEN_CASTLE_BLACK_MASK));
255+ ASSERT (7 == BITScanForward ( RIGHT_QUEEN_CASTLE_BLACK_MASK));
251256 chessboard[RIGHT_CASTLE_IDX] |= RIGHT_QUEEN_CASTLE_BLACK_MASK;
252257 break ;
253258 default :;
@@ -279,4 +284,4 @@ bool ChessBoard::checkNPieces(std::unordered_map<int, int> pieces) {
279284 return a == 13 ;
280285}
281286
282- #endif
287+ #endif
0 commit comments