]> git.sesse.net Git - stockfish/commitdiff
Convert move_is_check() to take a CheckInfo reference
authorMarco Costalba <mcostalba@gmail.com>
Mon, 9 Nov 2009 20:02:07 +0000 (21:02 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Mon, 9 Nov 2009 20:02:07 +0000 (21:02 +0100)
No functional change.

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

index 8ab712b46d1f81a0fe6cd25865f39a1ea57e3c93..413ed19935767043f252f7c341701565dccbe59a 100644 (file)
@@ -65,7 +65,7 @@ CheckInfo::CheckInfo(const Position& pos) {
   Color them = opposite_color(us);
 
   ksq = pos.king_square(them);
   Color them = opposite_color(us);
 
   ksq = pos.king_square(them);
-  dc = pos.discovered_check_candidates(us);
+  dcCandidates = pos.discovered_check_candidates(us);
 
   checkSq[PAWN] = pos.attacks_from<PAWN>(ksq, them);
   checkSq[KNIGHT] = pos.attacks_from<KNIGHT>(ksq);
 
   checkSq[PAWN] = pos.attacks_from<PAWN>(ksq, them);
   checkSq[KNIGHT] = pos.attacks_from<KNIGHT>(ksq);
@@ -552,11 +552,12 @@ bool Position::pl_move_is_evasion(Move m, Bitboard pinned) const
 
 bool Position::move_is_check(Move m) const {
 
 
 bool Position::move_is_check(Move m) const {
 
-  Bitboard dc = discovered_check_candidates(side_to_move());
-  return move_is_check(m, dc);
+  return move_is_check(m, CheckInfo(*this));
 }
 
 }
 
-bool Position::move_is_check(Move m, Bitboard dcCandidates) const {
+bool Position::move_is_check(Move m, const CheckInfo& ci) const {
+
+  Bitboard dcCandidates = ci.dcCandidates;
 
   assert(is_ok());
   assert(move_is_ok(m));
 
   assert(is_ok());
   assert(move_is_ok(m));
index 9e476722955a3f012bbf9c6f67a867db41d3078e..c04f1412e5db666ef0ac06f86395171f663abc66 100644 (file)
@@ -71,7 +71,7 @@ struct CheckInfo {
     CheckInfo(const Position&);
 
     Square ksq;
     CheckInfo(const Position&);
 
     Square ksq;
-    Bitboard dc;
+    Bitboard dcCandidates;
     Bitboard checkSq[8];
 };
 
     Bitboard checkSq[8];
 };
 
@@ -218,7 +218,7 @@ public:
   bool pl_move_is_legal(Move m, Bitboard pinned) const;
   bool pl_move_is_evasion(Move m, Bitboard pinned) const;
   bool move_is_check(Move m) const;
   bool pl_move_is_legal(Move m, Bitboard pinned) const;
   bool pl_move_is_evasion(Move m, Bitboard pinned) const;
   bool move_is_check(Move m) const;
-  bool move_is_check(Move m, Bitboard dcCandidates) const;
+  bool move_is_check(Move m, const CheckInfo& ci) const;
   bool move_is_capture(Move m) const;
   bool move_is_capture_or_promotion(Move m) const;
   bool move_is_passed_pawn_push(Move m) const;
   bool move_is_capture(Move m) const;
   bool move_is_capture_or_promotion(Move m) const;
   bool move_is_passed_pawn_push(Move m) const;
index f7ddfa0481f2f32697400015c408b91bdf75abc0..e5063b2453b01ff490f167993ddd3099f2a60a2b 100644 (file)
@@ -1115,7 +1115,7 @@ namespace {
     isCheck = pos.is_check();
     mateThreat = pos.has_mate_threat(opposite_color(pos.side_to_move()));
     CheckInfo ci(pos);
     isCheck = pos.is_check();
     mateThreat = pos.has_mate_threat(opposite_color(pos.side_to_move()));
     CheckInfo ci(pos);
-    dcCandidates = ci.dc;
+    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
     MovePicker mp = MovePicker(pos, ttMove, depth, H, &ss[ply]);
 
     // Loop through all legal moves until no moves remain or a beta cutoff
@@ -1127,7 +1127,7 @@ namespace {
       assert(move_is_ok(move));
 
       singleReply = (isCheck && mp.number_of_evasions() == 1);
       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;
       captureOrPromotion = pos.move_is_capture_or_promotion(move);
 
       movesSearched[moveCount++] = ss[ply].currentMove = move;
@@ -1373,7 +1373,7 @@ namespace {
     // to search all moves.
     MovePicker mp = MovePicker(pos, ttMove, depth, H, &ss[ply]);
     CheckInfo ci(pos);
     // to search all moves.
     MovePicker mp = MovePicker(pos, ttMove, depth, H, &ss[ply]);
     CheckInfo ci(pos);
-    dcCandidates = ci.dc;
+    dcCandidates = ci.dcCandidates;
     futilityValue = VALUE_NONE;
     useFutilityPruning = depth < SelectiveDepth && !isCheck;
 
     futilityValue = VALUE_NONE;
     useFutilityPruning = depth < SelectiveDepth && !isCheck;
 
@@ -1390,7 +1390,7 @@ namespace {
       assert(move_is_ok(move));
 
       singleReply = (isCheck && mp.number_of_evasions() == 1);
       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;
       captureOrPromotion = pos.move_is_capture_or_promotion(move);
 
       movesSearched[moveCount++] = ss[ply].currentMove = move;
@@ -1595,7 +1595,7 @@ namespace {
     // queen promotions and checks (only if depth == 0) will be generated.
     MovePicker mp = MovePicker(pos, ttMove, depth, H);
     CheckInfo ci(pos);
     // queen promotions and checks (only if depth == 0) will be generated.
     MovePicker mp = MovePicker(pos, ttMove, depth, H);
     CheckInfo ci(pos);
-    dcCandidates = ci.dc;
+    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
     enoughMaterial = pos.non_pawn_material(pos.side_to_move()) > RookValueMidgame;
 
     // Loop through the moves until no moves remain or a beta cutoff
@@ -1613,7 +1613,7 @@ namespace {
           && !isCheck
           && !pvNode
           && !move_is_promotion(move)
           && !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
           && !pos.move_is_passed_pawn_push(move))
       {
           futilityValue =  staticValue
@@ -1701,6 +1701,7 @@ namespace {
     assert(ActiveThreads > 1);
 
     Position pos = Position(sp->pos);
     assert(ActiveThreads > 1);
 
     Position pos = Position(sp->pos);
+    CheckInfo ci(pos);
     SearchStack* ss = sp->sstack[threadID];
     Value value;
     Move move;
     SearchStack* ss = sp->sstack[threadID];
     Value value;
     Move move;
@@ -1714,7 +1715,7 @@ namespace {
     {
       assert(move_is_ok(move));
 
     {
       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));
       bool captureOrPromotion = pos.move_is_capture_or_promotion(move);
 
       lock_grab(&(sp->lock));
@@ -1844,6 +1845,7 @@ namespace {
     assert(ActiveThreads > 1);
 
     Position pos = Position(sp->pos);
     assert(ActiveThreads > 1);
 
     Position pos = Position(sp->pos);
+    CheckInfo ci(pos);
     SearchStack* ss = sp->sstack[threadID];
     Value value;
     Move move;
     SearchStack* ss = sp->sstack[threadID];
     Value value;
     Move move;
@@ -1852,7 +1854,7 @@ namespace {
            && !thread_should_stop(threadID)
            && (move = sp->mp->get_next_move(sp->lock)) != MOVE_NONE)
     {
            && !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));
       bool captureOrPromotion = pos.move_is_capture_or_promotion(move);
 
       assert(move_is_ok(move));