]> git.sesse.net Git - stockfish/blobdiff - src/position.cpp
Retire find_checkers()
[stockfish] / src / position.cpp
index eb3cb895b51b7e1e2acccafe6899ff01ff41a432..e526885e50252daa058cab86232b5affc8597f82 100644 (file)
@@ -207,7 +207,7 @@ void Position::from_fen(const string& fen, bool isChess960) {
 
   // Various initialisations
   chess960 = isChess960;
-  find_checkers();
+  st->checkersBB = attackers_to(king_square(sideToMove)) & pieces(opposite_color(sideToMove));
 
   st->key = compute_key();
   st->pawnKey = compute_pawn_key();
@@ -245,7 +245,7 @@ void Position::set_castling_rights(char token) {
     Square sqH = relative_square(c, SQ_H1);
     Square rsq, ksq = king_square(c);
 
-    token = toupper(token);
+    token = char(toupper(token));
 
     if (token == 'K')
         for (rsq = sqH; piece_on(rsq) != make_piece(c, ROOK); rsq--) {}
@@ -493,19 +493,6 @@ bool Position::move_attacks_square(Move m, Square s) const {
 }
 
 
-/// Position::find_checkers() computes the checkersBB bitboard, which
-/// contains a nonzero bit for each checking piece (0, 1 or 2). It
-/// currently works by calling Position::attackers_to, which is probably
-/// inefficient. Consider rewriting this function to use the last move
-/// played, like in non-bitboard versions of Glaurung.
-
-void Position::find_checkers() {
-
-  Color us = side_to_move();
-  st->checkersBB = attackers_to(king_square(us)) & pieces(opposite_color(us));
-}
-
-
 /// Position::pl_move_is_legal() tests whether a pseudo-legal move is legal
 
 bool Position::pl_move_is_legal(Move m, Bitboard pinned) const {
@@ -1807,7 +1794,7 @@ void Position::flip() {
       st->epSquare = flip_square(pos.st->epSquare);
 
   // Checkers
-  find_checkers();
+  st->checkersBB = attackers_to(king_square(sideToMove)) & pieces(opposite_color(sideToMove));
 
   // Hash keys
   st->key = compute_key();
@@ -1965,10 +1952,10 @@ bool Position::is_ok(int* failedStep) const {
           for (PieceType pt = PAWN; pt <= KING; pt++)
               for (int i = 0; i < pieceCount[c][pt]; i++)
               {
-                  if (piece_on(piece_list(c, pt, i)) != make_piece(c, pt))
+                  if (piece_on(piece_list(c, pt)[i]) != make_piece(c, pt))
                       return false;
 
-                  if (index[piece_list(c, pt, i)] != i)
+                  if (index[piece_list(c, pt)[i]] != i)
                       return false;
               }