From 35aa21c1fe54f32c7090a073e8343b83c4c667e0 Mon Sep 17 00:00:00 2001 From: lucasart Date: Sat, 7 Feb 2015 09:09:56 +0000 Subject: [PATCH] Removes useless templates, some of which lead to code duplication: is_K*() functions. No functional change Resolves #245 --- src/material.cpp | 65 ++++++++++++++++++++---------------------------- 1 file changed, 27 insertions(+), 38 deletions(-) diff --git a/src/material.cpp b/src/material.cpp index 094a13df..9873a44e 100644 --- a/src/material.cpp +++ b/src/material.cpp @@ -64,31 +64,28 @@ namespace { Endgame ScaleKPsK[] = { Endgame(WHITE), Endgame(BLACK) }; Endgame ScaleKPKP[] = { Endgame(WHITE), Endgame(BLACK) }; - // Helper templates used to detect a given material distribution - template bool is_KXK(const Position& pos) { - const Color Them = (Us == WHITE ? BLACK : WHITE); - return !more_than_one(pos.pieces(Them)) - && pos.non_pawn_material(Us) >= RookValueMg; + // Helper used to detect a given material distribution + bool is_KXK(const Position& pos, Color us) { + return !more_than_one(pos.pieces(~us)) + && pos.non_pawn_material(us) >= RookValueMg; } - template bool is_KBPsKs(const Position& pos) { - return pos.non_pawn_material(Us) == BishopValueMg - && pos.count(Us) == 1 - && pos.count(Us) >= 1; + bool is_KBPsKs(const Position& pos, Color us) { + return pos.non_pawn_material(us) == BishopValueMg + && pos.count(us) == 1 + && pos.count(us) >= 1; } - template bool is_KQKRPs(const Position& pos) { - const Color Them = (Us == WHITE ? BLACK : WHITE); - return !pos.count(Us) - && pos.non_pawn_material(Us) == QueenValueMg - && pos.count(Us) == 1 - && pos.count(Them) == 1 - && pos.count(Them) >= 1; + bool is_KQKRPs(const Position& pos, Color us) { + return !pos.count(us) + && pos.non_pawn_material(us) == QueenValueMg + && pos.count(us) == 1 + && pos.count(~us) == 1 + && pos.count(~us) >= 1; } /// imbalance() calculates the imbalance by comparing the piece count of each /// piece type for both colors. - template int imbalance(const int pieceCount[][PIECE_TYPE_NB]) { @@ -142,17 +139,12 @@ Entry* probe(const Position& pos) { if (pos.this_thread()->endgames.probe(key, e->evaluationFunction)) return e; - if (is_KXK(pos)) - { - e->evaluationFunction = &EvaluateKXK[WHITE]; - return e; - } - - if (is_KXK(pos)) - { - e->evaluationFunction = &EvaluateKXK[BLACK]; - return e; - } + for (Color c = WHITE; c <= BLACK; ++c) + if (is_KXK(pos, c)) + { + e->evaluationFunction = &EvaluateKXK[c]; + return e; + } // OK, we didn't find any special evaluation function for the current material // configuration. Is there a suitable specialized scaling function? @@ -167,17 +159,14 @@ Entry* probe(const Position& pos) { // We didn't find any specialized scaling function, so fall back on generic // ones that refer to more than one material distribution. Note that in this // case we don't return after setting the function. - if (is_KBPsKs(pos)) - e->scalingFunction[WHITE] = &ScaleKBPsK[WHITE]; - - if (is_KBPsKs(pos)) - e->scalingFunction[BLACK] = &ScaleKBPsK[BLACK]; - - if (is_KQKRPs(pos)) - e->scalingFunction[WHITE] = &ScaleKQKRPs[WHITE]; + for (Color c = WHITE; c <= BLACK; ++c) + { + if (is_KBPsKs(pos, c)) + e->scalingFunction[c] = &ScaleKBPsK[c]; - else if (is_KQKRPs(pos)) - e->scalingFunction[BLACK] = &ScaleKQKRPs[BLACK]; + else if (is_KQKRPs(pos, c)) + e->scalingFunction[c] = &ScaleKQKRPs[c]; + } Value npm_w = pos.non_pawn_material(WHITE); Value npm_b = pos.non_pawn_material(BLACK); -- 2.39.2