Simplified discovered check connected_moves()
authorMarco Costalba <mcostalba@gmail.com>
Sat, 16 Jul 2011 08:36:03 +0000 (09:36 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Sat, 16 Jul 2011 08:50:35 +0000 (09:50 +0100)
No functional change.

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

index 829e1bbef9bb3155048e72d65e424b8ba7c2eb87..8b5f3b2b6d8c6171575a31f1cb3e3afcfe8327f3 100644 (file)
@@ -1549,6 +1549,7 @@ split_point_start: // At split points actual search starts from here
 
     Square f1, t1, f2, t2;
     Piece p1, p2;
+    Square ksq;
 
     assert(m1 && move_is_ok(m1));
     assert(m2 && move_is_ok(m2));
@@ -1577,16 +1578,13 @@ split_point_start: // At split points actual search starts from here
         return true;
 
     // Case 5: Discovered check, checking piece is the piece moved in m1
+    ksq = pos.king_square(pos.side_to_move());
     if (    piece_is_slider(p1)
-        &&  bit_is_set(squares_between(t1, pos.king_square(pos.side_to_move())), f2)
-        && !bit_is_set(squares_between(t1, pos.king_square(pos.side_to_move())), t2))
+        &&  bit_is_set(squares_between(t1, ksq), f2))
     {
-        // discovered_check_candidates() works also if the Position's side to
-        // move is the opposite of the checking piece.
-        Color them = opposite_color(pos.side_to_move());
-        Bitboard dcCandidates = pos.discovered_check_candidates(them);
-
-        if (bit_is_set(dcCandidates, f2))
+        Bitboard occ = pos.occupied_squares();
+        clear_bit(&occ, f2);
+        if (bit_is_set(pos.attacks_from(p1, t1, occ), ksq))
             return true;
     }
     return false;