// 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
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;
// 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;
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;
// 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
&& !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
assert(ActiveThreads > 1);
Position pos = Position(sp->pos);
+ CheckInfo ci(pos);
SearchStack* ss = sp->sstack[threadID];
Value value;
Move 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));
assert(ActiveThreads > 1);
Position pos = Position(sp->pos);
+ CheckInfo ci(pos);
SearchStack* ss = sp->sstack[threadID];
Value value;
Move move;
&& !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));