X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fmaterial.cpp;h=323611779963de5f62baf564e8ae98e920a9160b;hp=0e3ca8320e7a586a5a0f99cbf0a85e2b103d52d8;hb=55bd27b8f08a151128d7065fa2819aa3e9605299;hpb=32c504076f5a1d5c84f88c2d30a11c25ea2e5a6e diff --git a/src/material.cpp b/src/material.cpp index 0e3ca832..32361177 100644 --- a/src/material.cpp +++ b/src/material.cpp @@ -63,11 +63,11 @@ namespace { const Color Them = (Us == WHITE ? BLACK : WHITE); return pos.non_pawn_material(Them) == VALUE_ZERO && pos.piece_count(Them, PAWN) == 0 - && pos.non_pawn_material(Us) >= RookValueMidgame; + && pos.non_pawn_material(Us) >= RookValueMg; } template bool is_KBPsKs(const Position& pos) { - return pos.non_pawn_material(Us) == BishopValueMidgame + return pos.non_pawn_material(Us) == BishopValueMg && pos.piece_count(Us, BISHOP) == 1 && pos.piece_count(Us, PAWN) >= 1; } @@ -75,7 +75,7 @@ namespace { template bool is_KQKRPs(const Position& pos) { const Color Them = (Us == WHITE ? BLACK : WHITE); return pos.piece_count(Us, PAWN) == 0 - && pos.non_pawn_material(Us) == QueenValueMidgame + && pos.non_pawn_material(Us) == QueenValueMg && pos.piece_count(Us, QUEEN) == 1 && pos.piece_count(Them, ROOK) == 1 && pos.piece_count(Them, PAWN) >= 1; @@ -108,7 +108,7 @@ MaterialEntry* MaterialTable::probe(const Position& pos) { // Let's look if we have a specialized evaluation function for this // particular material configuration. First we look for a fixed // configuration one, then a generic one if previous search failed. - if ((e->evaluationFunction = endgames.probe(key)) != NULL) + if (endgames.probe(key, e->evaluationFunction)) return e; if (is_KXK(pos)) @@ -127,8 +127,8 @@ MaterialEntry* MaterialTable::probe(const Position& pos) { { // Minor piece endgame with at least one minor piece per side and // no pawns. Note that the case KmmK is already handled by KXK. - assert((pos.pieces(KNIGHT, WHITE) | pos.pieces(BISHOP, WHITE))); - assert((pos.pieces(KNIGHT, BLACK) | pos.pieces(BISHOP, BLACK))); + assert((pos.pieces(WHITE, KNIGHT) | pos.pieces(WHITE, BISHOP))); + assert((pos.pieces(BLACK, KNIGHT) | pos.pieces(BLACK, BISHOP))); if ( pos.piece_count(WHITE, BISHOP) + pos.piece_count(WHITE, KNIGHT) <= 2 && pos.piece_count(BLACK, BISHOP) + pos.piece_count(BLACK, KNIGHT) <= 2) @@ -145,7 +145,7 @@ MaterialEntry* MaterialTable::probe(const Position& pos) { // scaling functions and we need to decide which one to use. EndgameBase* sf; - if ((sf = endgames.probe(key)) != NULL) + if (endgames.probe(key, sf)) { e->scalingFunction[sf->color()] = sf; return e; @@ -191,20 +191,20 @@ MaterialEntry* MaterialTable::probe(const Position& pos) { } // No pawns makes it difficult to win, even with a material advantage - if (pos.piece_count(WHITE, PAWN) == 0 && npm_w - npm_b <= BishopValueMidgame) + if (pos.piece_count(WHITE, PAWN) == 0 && npm_w - npm_b <= BishopValueMg) { e->factor[WHITE] = (uint8_t) - (npm_w == npm_b || npm_w < RookValueMidgame ? 0 : NoPawnsSF[std::min(pos.piece_count(WHITE, BISHOP), 2)]); + (npm_w == npm_b || npm_w < RookValueMg ? 0 : NoPawnsSF[std::min(pos.piece_count(WHITE, BISHOP), 2)]); } - if (pos.piece_count(BLACK, PAWN) == 0 && npm_b - npm_w <= BishopValueMidgame) + if (pos.piece_count(BLACK, PAWN) == 0 && npm_b - npm_w <= BishopValueMg) { e->factor[BLACK] = (uint8_t) - (npm_w == npm_b || npm_b < RookValueMidgame ? 0 : NoPawnsSF[std::min(pos.piece_count(BLACK, BISHOP), 2)]); + (npm_w == npm_b || npm_b < RookValueMg ? 0 : NoPawnsSF[std::min(pos.piece_count(BLACK, BISHOP), 2)]); } // Compute the space weight - if (npm_w + npm_b >= 2 * QueenValueMidgame + 4 * RookValueMidgame + 2 * KnightValueMidgame) + if (npm_w + npm_b >= 2 * QueenValueMg + 4 * RookValueMg + 2 * KnightValueMg) { int minorPieceCount = pos.piece_count(WHITE, KNIGHT) + pos.piece_count(WHITE, BISHOP) + pos.piece_count(BLACK, KNIGHT) + pos.piece_count(BLACK, BISHOP);