Stricter condition to check for dc candidates
authorMarco Costalba <mcostalba@gmail.com>
Sat, 28 Feb 2009 12:43:49 +0000 (13:43 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Sat, 28 Feb 2009 17:43:20 +0000 (18:43 +0100)
Another optimization that let us remove another half
of find_hidden_checks(them, DcCandidates) calls.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
src/position.cpp

index ec54da9e9e3161b382120acfaadfe7c9866129fd..006309ea0e1251ec405f0bec2ccf2bc024c631d2 100644 (file)
@@ -725,16 +725,14 @@ void Position::update_hidden_checks(Square from, Square to) {
   if (   (moveSquares & RookPseudoAttacks[ksq])   && (checkerCaptured || (rooks_and_queens(them)   & RookPseudoAttacks[ksq]))
       || (moveSquares & BishopPseudoAttacks[ksq]) && (checkerCaptured || (bishops_and_queens(them) & BishopPseudoAttacks[ksq])))
   {
+      find_hidden_checks(them, Pinned);
 
       // If we don't have opponent dc candidates and we are moving in the
-      // attack line then won't be dc candidates also after the move.
+      // attack line then won't be any dc candidates also after the move.
       if (   st->dcCandidates[them]
-          || bit_is_set(RookPseudoAttacks[ksq], from)
-          || bit_is_set(BishopPseudoAttacks[ksq], from))
-
-          find_hidden_checks(them, Pinned | DcCandidates);
-      else
-          find_hidden_checks(them, Pinned);
+          || (bit_is_set(RookPseudoAttacks[ksq], from) && (rooks_and_queens(them) & RookPseudoAttacks[ksq]))
+          || (bit_is_set(BishopPseudoAttacks[ksq], from) && (bishops_and_queens(them) & BishopPseudoAttacks[ksq])))
+          find_hidden_checks(them, DcCandidates);
   }
 }