X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fendgame.cpp;h=2ebc8f97142522e02d5d3e1aa4ce8673697c8dd3;hp=c2e892eef0b9d8e712151b2d148786cbfae4bb09;hb=5b8ca1eee77b736c35b418b1cb11da9fc66f83e0;hpb=c2c185423b13b0227c86009c6006e48e8d258896 diff --git a/src/endgame.cpp b/src/endgame.cpp index c2e892ee..2ebc8f97 100644 --- a/src/endgame.cpp +++ b/src/endgame.cpp @@ -18,6 +18,7 @@ */ #include +#include #include "bitcount.h" #include "endgame.h" @@ -187,7 +188,7 @@ Value Endgame::apply(const Position& pos) const { // kbnk_mate_table() tries to drive toward corners A1 or H8, // if we have a bishop that cannot reach the above squares we // mirror the kings so to drive enemy toward corners A8 or H1. - if (opposite_color_squares(bishopSquare, SQ_A1)) + if (opposite_colors(bishopSquare, SQ_A1)) { winnerKSq = mirror(winnerKSq); loserKSq = mirror(loserKSq); @@ -375,7 +376,7 @@ Value Endgame::apply(const Position& pos) const { assert(pos.non_pawn_material(strongerSide) == 2*BishopValueMidgame); assert(pos.piece_count(weakerSide, KNIGHT) == 1); assert(pos.non_pawn_material(weakerSide) == KnightValueMidgame); - assert(pos.pieces(PAWN) == EmptyBoardBB); + assert(!pos.pieces(PAWN)); Value result = BishopValueEndgame; Square wksq = pos.king_square(strongerSide); @@ -427,13 +428,13 @@ ScaleFactor Endgame::apply(const Position& pos) const { // All pawns are on a single rook file ? if ( (pawnFile == FILE_A || pawnFile == FILE_H) - && (pawns & ~file_bb(pawnFile)) == EmptyBoardBB) + && !(pawns & ~file_bb(pawnFile))) { Square bishopSq = pos.piece_list(strongerSide, BISHOP)[0]; Square queeningSq = relative_square(strongerSide, make_square(pawnFile, RANK_8)); Square kingSq = pos.king_square(weakerSide); - if ( opposite_color_squares(queeningSq, bishopSq) + if ( opposite_colors(queeningSq, bishopSq) && abs(file_of(kingSq) - pawnFile) <= 1) { // The bishop has the wrong color, and the defending king is on the @@ -442,12 +443,12 @@ ScaleFactor Endgame::apply(const Position& pos) const { Rank rank; if (strongerSide == WHITE) { - for (rank = RANK_7; (rank_bb(rank) & pawns) == EmptyBoardBB; rank--) {} + for (rank = RANK_7; !(rank_bb(rank) & pawns); rank--) {} assert(rank >= RANK_2 && rank <= RANK_7); } else { - for (rank = RANK_2; (rank_bb(rank) & pawns) == EmptyBoardBB; rank++) {} + for (rank = RANK_2; !(rank_bb(rank) & pawns); rank++) {} rank = Rank(rank ^ 7); // HACK to get the relative rank assert(rank >= RANK_2 && rank <= RANK_7); } @@ -632,7 +633,7 @@ ScaleFactor Endgame::apply(const Position& pos) const { || pos.pawn_is_passed(strongerSide, wpsq2)) return SCALE_FACTOR_NONE; - Rank r = Max(relative_rank(strongerSide, wpsq1), relative_rank(strongerSide, wpsq2)); + Rank r = std::max(relative_rank(strongerSide, wpsq1), relative_rank(strongerSide, wpsq2)); if ( file_distance(bksq, wpsq1) <= 1 && file_distance(bksq, wpsq2) <= 1 @@ -666,21 +667,21 @@ ScaleFactor Endgame::apply(const Position& pos) const { Bitboard pawns = pos.pieces(PAWN, strongerSide); // Are all pawns on the 'a' file? - if ((pawns & ~FileABB) == EmptyBoardBB) + if (!(pawns & ~FileABB)) { // Does the defending king block the pawns? if ( square_distance(ksq, relative_square(strongerSide, SQ_A8)) <= 1 || ( file_of(ksq) == FILE_A - && (in_front_bb(strongerSide, ksq) & pawns) == EmptyBoardBB)) + && !in_front_bb(strongerSide, ksq) & pawns)) return SCALE_FACTOR_ZERO; } // Are all pawns on the 'h' file? - else if ((pawns & ~FileHBB) == EmptyBoardBB) + else if (!(pawns & ~FileHBB)) { // Does the defending king block the pawns? if ( square_distance(ksq, relative_square(strongerSide, SQ_H8)) <= 1 || ( file_of(ksq) == FILE_H - && (in_front_bb(strongerSide, ksq) & pawns) == EmptyBoardBB)) + && !in_front_bb(strongerSide, ksq) & pawns)) return SCALE_FACTOR_ZERO; } return SCALE_FACTOR_NONE; @@ -710,12 +711,12 @@ ScaleFactor Endgame::apply(const Position& pos) const { // Case 1: Defending king blocks the pawn, and cannot be driven away if ( file_of(weakerKingSq) == file_of(pawnSq) && relative_rank(strongerSide, pawnSq) < relative_rank(strongerSide, weakerKingSq) - && ( opposite_color_squares(weakerKingSq, strongerBishopSq) + && ( opposite_colors(weakerKingSq, strongerBishopSq) || relative_rank(strongerSide, weakerKingSq) <= RANK_6)) return SCALE_FACTOR_ZERO; // Case 2: Opposite colored bishops - if (opposite_color_squares(strongerBishopSq, weakerBishopSq)) + if (opposite_colors(strongerBishopSq, weakerBishopSq)) { // We assume that the position is drawn in the following three situations: // @@ -760,7 +761,7 @@ ScaleFactor Endgame::apply(const Position& pos) const { Square wbsq = pos.piece_list(strongerSide, BISHOP)[0]; Square bbsq = pos.piece_list(weakerSide, BISHOP)[0]; - if (!opposite_color_squares(wbsq, bbsq)) + if (!opposite_colors(wbsq, bbsq)) return SCALE_FACTOR_NONE; Square ksq = pos.king_square(weakerSide); @@ -788,7 +789,7 @@ ScaleFactor Endgame::apply(const Position& pos) const { // some square in the frontmost pawn's path. if ( file_of(ksq) == file_of(blockSq1) && relative_rank(strongerSide, ksq) >= relative_rank(strongerSide, blockSq1) - && opposite_color_squares(ksq, wbsq)) + && opposite_colors(ksq, wbsq)) return SCALE_FACTOR_ZERO; else return SCALE_FACTOR_NONE; @@ -798,14 +799,14 @@ ScaleFactor Endgame::apply(const Position& pos) const { // in front of the frontmost pawn's path, and the square diagonally behind // this square on the file of the other pawn. if ( ksq == blockSq1 - && opposite_color_squares(ksq, wbsq) + && opposite_colors(ksq, wbsq) && ( bbsq == blockSq2 || (pos.attacks_from(blockSq2) & pos.pieces(BISHOP, weakerSide)) || abs(r1 - r2) >= 2)) return SCALE_FACTOR_ZERO; else if ( ksq == blockSq2 - && opposite_color_squares(ksq, wbsq) + && opposite_colors(ksq, wbsq) && ( bbsq == blockSq1 || (pos.attacks_from(blockSq1) & pos.pieces(BISHOP, weakerSide)))) return SCALE_FACTOR_ZERO; @@ -839,7 +840,7 @@ ScaleFactor Endgame::apply(const Position& pos) const { if ( file_of(weakerKingSq) == file_of(pawnSq) && relative_rank(strongerSide, pawnSq) < relative_rank(strongerSide, weakerKingSq) - && ( opposite_color_squares(weakerKingSq, strongerBishopSq) + && ( opposite_colors(weakerKingSq, strongerBishopSq) || relative_rank(strongerSide, weakerKingSq) <= RANK_6)) return SCALE_FACTOR_ZERO;