X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fendgame.h;h=d7a7681abd985910b8ddf53254a4ab4394f64dc2;hp=cd05f0cd1b6273cfa91341d379bc36439d3271d5;hb=3017e8c60401ecd92468a9ede3368002c4ddd440;hpb=098f645d26675bcf2180b290be77fe64a63de3ae diff --git a/src/endgame.h b/src/endgame.h index cd05f0cd..d7a7681a 100644 --- a/src/endgame.h +++ b/src/endgame.h @@ -21,10 +21,7 @@ #define ENDGAME_H_INCLUDED #include -#include #include -#include -#include #include "position.h" #include "types.h" @@ -66,9 +63,11 @@ enum EndgameType { /// Endgame functions can be of two types depending on whether they return a -/// Value or a ScaleFactor. -template using -eg_type = typename std::conditional<(E < SCALING_FUNCTIONS), Value, ScaleFactor>::type; +/// Value or a ScaleFactor. Type eg_fun::type returns either ScaleFactor +/// or Value depending on whether the template parameter is 0 or 1. + +template struct eg_fun { typedef Value type; }; +template<> struct eg_fun<1> { typedef ScaleFactor type; }; /// Base and derived templates for endgame evaluation and scaling functions @@ -82,7 +81,7 @@ struct EndgameBase { }; -template> +template SCALING_FUNCTIONS)>::type> struct Endgame : public EndgameBase { explicit Endgame(Color c) : strongSide(c), weakSide(~c) {} @@ -100,24 +99,23 @@ private: class Endgames { - template using Map = std::map>>; + typedef std::map::type>*> M1; + typedef std::map::type>*> M2; - template> - void add(const std::string& code); + M1 m1; + M2 m2; - template - Map& map() { - return std::get::value>(maps); - } + M1& map(M1::mapped_type) { return m1; } + M2& map(M2::mapped_type) { return m2; } - std::pair, Map> maps; + template void add(const std::string& code); public: Endgames(); + ~Endgames(); - template - EndgameBase* probe(Key key) { - return map().count(key) ? map()[key].get() : nullptr; + template T probe(Key key, T& eg) { + return eg = map(eg).count(key) ? map(eg)[key] : NULL; } };