X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fendgame.h;h=21e8ab6d6e5b6d249a765f0c4381c9cf7465f93a;hp=ae3526fedaeae8777416c5fa7263ced01c7a618f;hb=039badfda8fa05bc466612bce996837c7d69f22b;hpb=bb751d6c890f5c50c642366d601740366cfae8d0 diff --git a/src/endgame.h b/src/endgame.h index ae3526fe..21e8ab6d 100644 --- a/src/endgame.h +++ b/src/endgame.h @@ -1,17 +1,18 @@ /* - Glaurung, a UCI chess playing engine. - Copyright (C) 2004-2008 Tord Romstad + Stockfish, a UCI chess playing engine derived from Glaurung 2.1 + Copyright (C) 2004-2008 Tord Romstad (Glaurung author) + Copyright (C) 2008 Marco Costalba - Glaurung is free software: you can redistribute it and/or modify + Stockfish is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - - Glaurung is distributed in the hope that it will be useful, + + Stockfish is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program. If not, see . */ @@ -33,72 +34,41 @@ //// Types //// -/// Abstract base class for all special endgame evaluation functions: +/// Abstract base class for all special endgame evaluation functions class EndgameEvaluationFunction { public: EndgameEvaluationFunction(Color c); virtual ~EndgameEvaluationFunction() { } - virtual Value apply(const Position &pos) =0; + virtual Value apply(const Position &pos) = 0; protected: Color strongerSide, weakerSide; }; -/// Subclasses for various concrete endgames: - -// Generic "mate lone king" eval: -class KXKEvaluationFunction : public EndgameEvaluationFunction { -public: - KXKEvaluationFunction(Color c); - Value apply(const Position &pos); -}; - -// KBN vs K: -class KBNKEvaluationFunction : public EndgameEvaluationFunction { -public: - KBNKEvaluationFunction(Color c); - Value apply(const Position &pos); -}; - -// KP vs K: -class KPKEvaluationFunction : public EndgameEvaluationFunction { -public: - KPKEvaluationFunction(Color c); - Value apply(const Position &pos); -}; - -// KR vs KP: -class KRKPEvaluationFunction : public EndgameEvaluationFunction { -public: - KRKPEvaluationFunction(Color c); - Value apply(const Position &pos); -}; - -// KR vs KB: -class KRKBEvaluationFunction : public EndgameEvaluationFunction { -public: - KRKBEvaluationFunction(Color c); - Value apply(const Position &pos); -}; +/// Template subclass for various concrete endgames -// KR vs KN: -class KRKNEvaluationFunction : public EndgameEvaluationFunction { -public: - KRKNEvaluationFunction(Color c); - Value apply(const Position &pos); +enum EndgameType { + KXK, // Generic "mate lone king" eval + KBNK, // KBN vs K + KPK, // KP vs K + KRKP, // KR vs KP + KRKB, // KR vs KB + KRKN, // KR vs KN + KQKR, // KQ vs KR + KBBKN, // KBB vs KN + KmmKm // K and two minors vs K and one or two minors }; -// KQ vs KR: -class KQKREvaluationFunction : public EndgameEvaluationFunction { +template +class EvaluationFunction : public EndgameEvaluationFunction { public: - KQKREvaluationFunction(Color c); - Value apply(const Position &pos); + explicit EvaluationFunction(Color c): EndgameEvaluationFunction(c) {} + Value apply(const Position& pos); }; - /// Abstract base class for all evaluation scaling functions: class ScalingFunction { @@ -183,26 +153,15 @@ public: //// Constants and variables //// -// Generic "mate lone king" eval: -extern KXKEvaluationFunction EvaluateKXK, EvaluateKKX; - -// KBN vs K: -extern KBNKEvaluationFunction EvaluateKBNK, EvaluateKKBN; - -// KP vs K: -extern KPKEvaluationFunction EvaluateKPK, EvaluateKKP; - -// KR vs KP: -extern KRKPEvaluationFunction EvaluateKRKP, EvaluateKPKR; - -// KR vs KB: -extern KRKBEvaluationFunction EvaluateKRKB, EvaluateKBKR; - -// KR vs KN: -extern KRKNEvaluationFunction EvaluateKRKN, EvaluateKNKR; - -// KQ vs KR: -extern KQKREvaluationFunction EvaluateKQKR, EvaluateKRKQ; +extern EvaluationFunction EvaluateKXK, EvaluateKKX; // Generic "mate lone king" eval +extern EvaluationFunction EvaluateKBNK, EvaluateKKBN; // KBN vs K +extern EvaluationFunction EvaluateKPK, EvaluateKKP; // KP vs K +extern EvaluationFunction EvaluateKRKP, EvaluateKPKR; // KR vs KP +extern EvaluationFunction EvaluateKRKB, EvaluateKBKR; // KR vs KB +extern EvaluationFunction EvaluateKRKN, EvaluateKNKR; // KR vs KN +extern EvaluationFunction EvaluateKQKR, EvaluateKRKQ; // KQ vs KR +extern EvaluationFunction EvaluateKBBKN, EvaluateKNKBB; // KBB vs KN +extern EvaluationFunction EvaluateKmmKm; // K and two minors vs K and one or two minors: // KBP vs K: extern KBPKScalingFunction ScaleKBPK, ScaleKKBP;