From: Joona Kiiski Date: Tue, 14 Dec 2010 13:49:06 +0000 (+0200) Subject: Let check_is_useless() follow SF coding style X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=47f5560e2dccfad9aa64afc7a002ce049b7504d3 Let check_is_useless() follow SF coding style No functional change Signed-off-by: Marco Costalba --- diff --git a/src/search.cpp b/src/search.cpp index 6f1f5761..38e445b3 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -297,6 +297,8 @@ namespace { template Depth extension(const Position& pos, Move m, bool captureOrPromotion, bool moveIsCheck, bool singleEvasion, bool mateThreat, bool* dangerous); + bool check_is_useless(Position &pos, Move move, Value eval, Value futilityBase, Value beta, Value *bValue); + Bitboard attacks(const Piece P, const Square sq, const Bitboard occ); bool connected_moves(const Position& pos, Move m1, Move m2); bool value_is_mate(Value value); Value value_to_tt(Value v, int ply); @@ -1448,90 +1450,6 @@ split_point_start: // At split points actual search starts from here return bestValue; } - Bitboard attacks(const Piece P, const Square sq, const Bitboard occ) - { - switch(P) - { - case WP: - case BP: - case WN: - case BN: - case WK: - case BK: - return StepAttackBB[P][sq]; - case WB: - case BB: - return bishop_attacks_bb(sq, occ); - case WR: - case BR: - return rook_attacks_bb(sq, occ); - case WQ: - case BQ: - return bishop_attacks_bb(sq, occ) | rook_attacks_bb(sq, occ); - default: - assert(false); - return 0ULL; - } - } - - bool check_is_useless(Position &pos, Move move, Value eval, Value futilityBase, Value beta, Value *bValue) - { - Value bestValue = *bValue; - - /// Rule 1. Using checks to reposition pieces when close to beta - if (eval + PawnValueMidgame / 4 < beta) - { - if (eval + PawnValueMidgame / 4 > bestValue) - bestValue = eval + PawnValueMidgame / 4; - } - else - return false; - - Square from = move_from(move); - Square to = move_to(move); - Color oppColor = opposite_color(pos.side_to_move()); - Square oppKing = pos.king_square(oppColor); - - Bitboard occ = pos.occupied_squares() & ~(1ULL << from) & ~(1ULL <= beta && pos.see_sign(make_move(from, victimSq)) >= 0) - return false; - - if (futilityValue > bestValue) - bestValue = futilityValue; - } - - *bValue = bestValue; - return true; - } - // qsearch() is the quiescence search function, which is called by the main // search function when the remaining depth is zero (or, to be more precise, // less than ONE_PLY). @@ -1670,10 +1588,10 @@ split_point_start: // At split points actual search starts from here // Don't search useless checks if ( !PvNode && !isCheck + && moveIsCheck && move != ttMove - && !move_is_promotion(move) && !pos.move_is_capture(move) - && moveIsCheck + && !move_is_promotion(move) && check_is_useless(pos, move, ss->eval, futilityBase, beta, &bestValue)) continue; @@ -1713,6 +1631,94 @@ split_point_start: // At split points actual search starts from here return bestValue; } + // check_is_useless() tests if a checking move can be pruned in qsearch(). + // bestValue is updated when necesary. + + bool check_is_useless(Position &pos, Move move, Value eval, Value futilityBase, Value beta, Value *bValue) + { + Value bestValue = *bValue; + + /// Rule 1. Using checks to reposition pieces when close to beta + if (eval + PawnValueMidgame / 4 < beta) + { + if (eval + PawnValueMidgame / 4 > bestValue) + bestValue = eval + PawnValueMidgame / 4; + } + else + return false; + + Square from = move_from(move); + Square to = move_to(move); + Color oppColor = opposite_color(pos.side_to_move()); + Square oppKing = pos.king_square(oppColor); + + Bitboard occ = pos.occupied_squares() & ~(1ULL << from) & ~(1ULL <= beta && pos.see_sign(make_move(from, victimSq)) >= 0) + return false; + + if (futilityValue > bestValue) + bestValue = futilityValue; + } + + *bValue = bestValue; + return true; + } + + // attacks() returns attacked squares. + + Bitboard attacks(const Piece P, const Square sq, const Bitboard occ) + { + switch(P) + { + case WP: + case BP: + case WN: + case BN: + case WK: + case BK: + return StepAttackBB[P][sq]; + case WB: + case BB: + return bishop_attacks_bb(sq, occ); + case WR: + case BR: + return rook_attacks_bb(sq, occ); + case WQ: + case BQ: + return bishop_attacks_bb(sq, occ) | rook_attacks_bb(sq, occ); + default: + assert(false); + return 0ULL; + } + } // connected_moves() tests whether two moves are 'connected' in the sense // that the first move somehow made the second move possible (for instance