public:
EndgameFunctions();
- EndgameEvaluationFunction* getEEF(Key key) const;
- ScalingFunction* getESF(Key key, Color* c) const;
+ EndgameEvaluationFunctionBase* getEEF(Key key) const;
+ EndgameScalingFunctionBase* getESF(Key key, Color* c) const;
private:
- void add(Key k, EndgameEvaluationFunction* f);
- void add(Key k, Color c, ScalingFunction* f);
+ void add(Key k, EndgameEvaluationFunctionBase* f);
+ void add(Key k, Color c, EndgameScalingFunctionBase* f);
struct ScalingInfo
{
Color col;
- ScalingFunction* fun;
+ EndgameScalingFunctionBase* fun;
};
- std::map<Key, EndgameEvaluationFunction*> EEFmap;
+ std::map<Key, EndgameEvaluationFunctionBase*> EEFmap;
std::map<Key, ScalingInfo> ESFmap;
};
}
// Let's look if we have a specialized evaluation function for this
- // particular material configuration.
+ // particular material configuration. First we look for a fixed
+ // configuration one, then a generic one if previous search failed.
if ((mi->evaluationFunction = funcs->getEEF(key)) != NULL)
return mi;
// are several conflicting applicable scaling functions and we need to
// decide which one to use.
Color c;
- ScalingFunction* sf;
+ EndgameScalingFunctionBase* sf;
if ((sf = funcs->getESF(key, &c)) != NULL)
{
/// EndgameFunctions member definitions. This class is used to store the maps
-/// of end game and scaling functions that MaterialInfoTable will query for
+/// of end game and scaling functions that MaterialInfoTable will query for
/// each key. The maps are constant and are populated only at construction,
/// but are per-thread instead of globals to avoid expensive locks.
add(z[W][ROOK][1] ^ z[W][PAWN][1] ^ z[B][ROOK][1] ^ z[B][PAWN][1] ^ z[B][PAWN][2], B, &ScaleKRPKRPP);
}
-void EndgameFunctions::add(Key k, EndgameEvaluationFunction* f) {
+void EndgameFunctions::add(Key k, EndgameEvaluationFunctionBase* f) {
- EEFmap.insert(std::pair<Key, EndgameEvaluationFunction*>(k, f));
+ EEFmap.insert(std::pair<Key, EndgameEvaluationFunctionBase*>(k, f));
}
-void EndgameFunctions::add(Key k, Color c, ScalingFunction* f) {
+void EndgameFunctions::add(Key k, Color c, EndgameScalingFunctionBase* f) {
ScalingInfo s = {c, f};
ESFmap.insert(std::pair<Key, ScalingInfo>(k, s));
}
-EndgameEvaluationFunction* EndgameFunctions::getEEF(Key key) const {
+EndgameEvaluationFunctionBase* EndgameFunctions::getEEF(Key key) const {
- std::map<Key, EndgameEvaluationFunction*>::const_iterator it(EEFmap.find(key));
+ std::map<Key, EndgameEvaluationFunctionBase*>::const_iterator it(EEFmap.find(key));
return (it != EEFmap.end() ? it->second : NULL);
}
-ScalingFunction* EndgameFunctions::getESF(Key key, Color* c) const {
+EndgameScalingFunctionBase* EndgameFunctions::getESF(Key key, Color* c) const {
std::map<Key, ScalingInfo>::const_iterator it(ESFmap.find(key));
if (it == ESFmap.end())