+ typedef EndgameBase<Value> EF;
+ typedef EndgameBase<ScaleFactor> SF;
+
+} // namespace
+
+
+/// Endgames member definitions
+
+template<> const Endgames::EFMap& Endgames::get<EF>() const { return maps.first; }
+template<> const Endgames::SFMap& Endgames::get<SF>() const { return maps.second; }
+
+Endgames::Endgames() {
+
+ add<Endgame<Value, KNNK> >("KNNK");
+ add<Endgame<Value, KPK> >("KPK");
+ add<Endgame<Value, KBNK> >("KBNK");
+ add<Endgame<Value, KRKP> >("KRKP");
+ add<Endgame<Value, KRKB> >("KRKB");
+ add<Endgame<Value, KRKN> >("KRKN");
+ add<Endgame<Value, KQKR> >("KQKR");
+ add<Endgame<Value, KBBKN> >("KBBKN");
+
+ add<Endgame<ScaleFactor, KNPK> >("KNPK");
+ add<Endgame<ScaleFactor, KRPKR> >("KRPKR");
+ add<Endgame<ScaleFactor, KBPKB> >("KBPKB");
+ add<Endgame<ScaleFactor, KBPPKB> >("KBPPKB");
+ add<Endgame<ScaleFactor, KBPKN> >("KBPKN");
+ add<Endgame<ScaleFactor, KRPPKRP> >("KRPPKRP");
+}
+
+Endgames::~Endgames() {
+
+ for (EFMap::const_iterator it = get<EF>().begin(); it != get<EF>().end(); ++it)
+ delete it->second;