mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-23 10:36:26 +08:00
Detect family type of endgame from its enum value
No functional change. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
@@ -46,6 +46,7 @@ enum EndgameType {
|
||||
|
||||
|
||||
// Scaling functions
|
||||
SCALE_FUNS,
|
||||
|
||||
KBPsK, // KB+pawns vs K
|
||||
KQKRPs, // KQ vs KR+pawns
|
||||
@@ -60,20 +61,25 @@ enum EndgameType {
|
||||
};
|
||||
|
||||
|
||||
/// Some magic to detect family type of endgame from its enum value
|
||||
|
||||
template<bool> struct bool_to_type { typedef Value type; };
|
||||
template<> struct bool_to_type<true> { typedef ScaleFactor type; };
|
||||
template<EndgameType E> struct eg_family : public bool_to_type<(E > SCALE_FUNS)> {};
|
||||
|
||||
|
||||
/// Base and derived templates for endgame evaluation and scaling functions
|
||||
|
||||
template<typename T>
|
||||
struct EndgameBase {
|
||||
|
||||
typedef EndgameBase<T> Base;
|
||||
|
||||
virtual ~EndgameBase() {}
|
||||
virtual Color color() const = 0;
|
||||
virtual T apply(const Position&) const = 0;
|
||||
};
|
||||
|
||||
|
||||
template<typename T, EndgameType>
|
||||
template<EndgameType E, typename T = typename eg_family<E>::type>
|
||||
struct Endgame : public EndgameBase<T> {
|
||||
|
||||
explicit Endgame(Color c) : strongerSide(c), weakerSide(opposite_color(c)) {}
|
||||
@@ -99,7 +105,7 @@ struct Endgames {
|
||||
template<typename T> EndgameBase<T>* get(Key key) const;
|
||||
|
||||
private:
|
||||
template<typename T, EndgameType E> void add(const std::string& keyCode);
|
||||
template<EndgameType E> void add(const std::string& keyCode);
|
||||
|
||||
// Here we store two maps, for evaluate and scaling functions...
|
||||
std::pair<EMap<Value>::type, EMap<ScaleFactor>::type> maps;
|
||||
|
||||
Reference in New Issue
Block a user