]> git.sesse.net Git - stockfish/blobdiff - src/search.cpp
Fully convert move_is_check() internally
[stockfish] / src / search.cpp
index c1a91a97ea0f637ca1658bb946c1886060f3ce65..e5063b2453b01ff490f167993ddd3099f2a60a2b 100644 (file)
@@ -1114,7 +1114,8 @@ namespace {
     // to search all moves
     isCheck = pos.is_check();
     mateThreat = pos.has_mate_threat(opposite_color(pos.side_to_move()));
-    dcCandidates = pos.discovered_check_candidates(pos.side_to_move());
+    CheckInfo ci(pos);
+    dcCandidates = ci.dcCandidates;
     MovePicker mp = MovePicker(pos, ttMove, depth, H, &ss[ply]);
 
     // Loop through all legal moves until no moves remain or a beta cutoff
@@ -1126,7 +1127,7 @@ namespace {
       assert(move_is_ok(move));
 
       singleReply = (isCheck && mp.number_of_evasions() == 1);
-      moveIsCheck = pos.move_is_check(move, dcCandidates);
+      moveIsCheck = pos.move_is_check(move, ci);
       captureOrPromotion = pos.move_is_capture_or_promotion(move);
 
       movesSearched[moveCount++] = ss[ply].currentMove = move;
@@ -1371,7 +1372,8 @@ namespace {
     // Initialize a MovePicker object for the current position, and prepare
     // to search all moves.
     MovePicker mp = MovePicker(pos, ttMove, depth, H, &ss[ply]);
-    dcCandidates = pos.discovered_check_candidates(pos.side_to_move());
+    CheckInfo ci(pos);
+    dcCandidates = ci.dcCandidates;
     futilityValue = VALUE_NONE;
     useFutilityPruning = depth < SelectiveDepth && !isCheck;
 
@@ -1388,7 +1390,7 @@ namespace {
       assert(move_is_ok(move));
 
       singleReply = (isCheck && mp.number_of_evasions() == 1);
-      moveIsCheck = pos.move_is_check(move, dcCandidates);
+      moveIsCheck = pos.move_is_check(move, ci);
       captureOrPromotion = pos.move_is_capture_or_promotion(move);
 
       movesSearched[moveCount++] = ss[ply].currentMove = move;
@@ -1592,7 +1594,8 @@ namespace {
     // to search the moves.  Because the depth is <= 0 here, only captures,
     // queen promotions and checks (only if depth == 0) will be generated.
     MovePicker mp = MovePicker(pos, ttMove, depth, H);
-    dcCandidates = pos.discovered_check_candidates(pos.side_to_move());
+    CheckInfo ci(pos);
+    dcCandidates = ci.dcCandidates;
     enoughMaterial = pos.non_pawn_material(pos.side_to_move()) > RookValueMidgame;
 
     // Loop through the moves until no moves remain or a beta cutoff
@@ -1610,7 +1613,7 @@ namespace {
           && !isCheck
           && !pvNode
           && !move_is_promotion(move)
-          && !pos.move_is_check(move, dcCandidates)
+          && !pos.move_is_check(move, ci)
           && !pos.move_is_passed_pawn_push(move))
       {
           futilityValue =  staticValue
@@ -1698,6 +1701,7 @@ namespace {
     assert(ActiveThreads > 1);
 
     Position pos = Position(sp->pos);
+    CheckInfo ci(pos);
     SearchStack* ss = sp->sstack[threadID];
     Value value;
     Move move;
@@ -1711,7 +1715,7 @@ namespace {
     {
       assert(move_is_ok(move));
 
-      bool moveIsCheck = pos.move_is_check(move, sp->dcCandidates);
+      bool moveIsCheck = pos.move_is_check(move, ci);
       bool captureOrPromotion = pos.move_is_capture_or_promotion(move);
 
       lock_grab(&(sp->lock));
@@ -1841,6 +1845,7 @@ namespace {
     assert(ActiveThreads > 1);
 
     Position pos = Position(sp->pos);
+    CheckInfo ci(pos);
     SearchStack* ss = sp->sstack[threadID];
     Value value;
     Move move;
@@ -1849,7 +1854,7 @@ namespace {
            && !thread_should_stop(threadID)
            && (move = sp->mp->get_next_move(sp->lock)) != MOVE_NONE)
     {
-      bool moveIsCheck = pos.move_is_check(move, sp->dcCandidates);
+      bool moveIsCheck = pos.move_is_check(move, ci);
       bool captureOrPromotion = pos.move_is_capture_or_promotion(move);
 
       assert(move_is_ok(move));