enum EndgameType {
// Evaluation functions
+
KXK, // Generic "mate lone king" eval
KBNK, // KBN vs K
KPK, // KP vs K
KNNK, // KNN vs K
KmmKm, // K and two minors vs K and one or two minors
+
// Scaling functions
+
KBPsK, // KB+pawns vs K
KQKRPs, // KQ vs KR+pawns
KRPKR, // KRP vs KR
};
-/// Base and derived template class for endgame evaluation and scaling functions
+/// Base and derived templates for endgame evaluation and scaling functions
template<typename T>
struct EndgameBase {
typedef EndgameBase<T> Base;
- EndgameBase(Color c) : strongerSide(c), weakerSide(opposite_color(c)) {}
virtual ~EndgameBase() {}
+ virtual Color color() const = 0;
virtual T apply(const Position&) const = 0;
- Color color() const { return strongerSide; }
-
-protected:
- Color strongerSide, weakerSide;
};
template<typename T, EndgameType>
struct Endgame : public EndgameBase<T> {
- explicit Endgame(Color c): EndgameBase<T>(c) {}
+ explicit Endgame(Color c) : strongerSide(c), weakerSide(opposite_color(c)) {}
+ Color color() const { return strongerSide; }
T apply(const Position&) const;
+
+private:
+ Color strongerSide, weakerSide;
};
class Endgames {
- typedef std::map<Key, EndgameBase<Value>*> EFMap;
- typedef std::map<Key, EndgameBase<ScaleFactor>*> SFMap;
+ typedef std::map<Key, EndgameBase<Value>* > EFMap;
+ typedef std::map<Key, EndgameBase<ScaleFactor>* > SFMap;
public:
Endgames();