KRKN, // KR vs KN
KQKR, // KQ vs KR
KBBKN, // KBB vs KN
+ KNNK, // KNN vs K
KmmKm, // K and two minors vs K and one or two minors
// Scaling functions
- KBPK, // KBP vs K
- KQKRP, // KQ vs KRP
+ KBPsK, // KB+pawns vs K
+ KQKRPs, // KQ vs KR+pawns
KRPKR, // KRP vs KR
KRPPKRP, // KRPP vs KRP
KPsK, // King and pawns vs king
EndgameFunctionBase(Color c) : strongerSide(c), weakerSide(opposite_color(c)) {}
virtual ~EndgameFunctionBase() {}
virtual T apply(const Position&) = 0;
+ Color color() const { return strongerSide; }
protected:
Color strongerSide, weakerSide;
template<EndgameType>
struct EvaluationFunction : public EndgameEvaluationFunctionBase {
+ typedef EndgameEvaluationFunctionBase Base;
explicit EvaluationFunction(Color c): EndgameEvaluationFunctionBase(c) {}
Value apply(const Position&);
};
template<EndgameType>
struct ScalingFunction : public EndgameScalingFunctionBase {
+ typedef EndgameScalingFunctionBase Base;
explicit ScalingFunction(Color c) : EndgameScalingFunctionBase(c) {}
ScaleFactor apply(const Position&);
};