From 975d5e9c6444b3289cb8688d68d17ec9ed2a2285 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Mon, 9 Nov 2009 21:02:07 +0100 Subject: [PATCH] Convert move_is_check() to take a CheckInfo reference No functional change. Signed-off-by: Marco Costalba --- src/position.cpp | 9 +++++---- src/position.h | 4 ++-- src/search.cpp | 18 ++++++++++-------- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/position.cpp b/src/position.cpp index 8ab712b4..413ed199 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -65,7 +65,7 @@ CheckInfo::CheckInfo(const Position& pos) { 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(ksq, them); checkSq[KNIGHT] = pos.attacks_from(ksq); @@ -552,11 +552,12 @@ bool Position::pl_move_is_evasion(Move m, Bitboard pinned) 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)); diff --git a/src/position.h b/src/position.h index 9e476722..c04f1412 100644 --- a/src/position.h +++ b/src/position.h @@ -71,7 +71,7 @@ struct CheckInfo { CheckInfo(const Position&); Square ksq; - Bitboard dc; + Bitboard dcCandidates; 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 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; diff --git a/src/search.cpp b/src/search.cpp index f7ddfa04..e5063b24 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -1115,7 +1115,7 @@ namespace { 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 @@ -1127,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; @@ -1373,7 +1373,7 @@ namespace { // 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; @@ -1390,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; @@ -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); - 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 @@ -1613,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 @@ -1701,6 +1701,7 @@ namespace { assert(ActiveThreads > 1); Position pos = Position(sp->pos); + CheckInfo ci(pos); SearchStack* ss = sp->sstack[threadID]; Value value; Move move; @@ -1714,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)); @@ -1844,6 +1845,7 @@ namespace { assert(ActiveThreads > 1); Position pos = Position(sp->pos); + CheckInfo ci(pos); 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) { - 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)); -- 2.39.2