]> git.sesse.net Git - stockfish/blobdiff - src/endgame.h
Disable spinlocks
[stockfish] / src / endgame.h
index 453d8b29d47d98780fb8a04bb00da8efed95ff8c..cd05f0cd1b6273cfa91341d379bc36439d3271d5 100644 (file)
@@ -67,8 +67,8 @@ enum EndgameType {
 
 /// Endgame functions can be of two types depending on whether they return a
 /// Value or a ScaleFactor.
-template<EndgameType E>
-using eg_fun = std::conditional<(E < SCALING_FUNCTIONS), Value, ScaleFactor>;
+template<EndgameType E> using
+eg_type = typename std::conditional<(E < SCALING_FUNCTIONS), Value, ScaleFactor>::type;
 
 
 /// Base and derived templates for endgame evaluation and scaling functions
@@ -82,7 +82,7 @@ struct EndgameBase {
 };
 
 
-template<EndgameType E, typename T = typename eg_fun<E>::type>
+template<EndgameType E, typename T = eg_type<E>>
 struct Endgame : public EndgameBase<T> {
 
   explicit Endgame(Color c) : strongSide(c), weakSide(~c) {}
@@ -90,7 +90,7 @@ struct Endgame : public EndgameBase<T> {
   T operator()(const Position&) const;
 
 private:
-  const Color strongSide, weakSide;
+  Color strongSide, weakSide;
 };
 
 
@@ -100,21 +100,25 @@ private:
 
 class Endgames {
 
-  template<typename T> using Map = std::map<Key, std::unique_ptr<T>>;
+  template<typename T> using Map = std::map<Key, std::unique_ptr<EndgameBase<T>>>;
 
-  template<EndgameType E, typename T = EndgameBase<typename eg_fun<E>::type>>
+  template<EndgameType E, typename T = eg_type<E>>
   void add(const std::string& code);
 
-  template<typename T, int I = std::is_same<T, EndgameBase<ScaleFactor>>::value>
-  Map<T>& map() { return std::get<I>(maps); }
+  template<typename T>
+  Map<T>& map() {
+    return std::get<std::is_same<T, ScaleFactor>::value>(maps);
+  }
 
-  std::pair<Map<EndgameBase<Value>>, Map<EndgameBase<ScaleFactor>>> maps;
+  std::pair<Map<Value>, Map<ScaleFactor>> maps;
 
 public:
   Endgames();
 
-  template<typename T, typename E = EndgameBase<T>> E* probe(Key key)
-  { return map<E>().count(key) ? map<E>()[key].get() : nullptr; }
+  template<typename T>
+  EndgameBase<T>* probe(Key key) {
+    return map<T>().count(key) ? map<T>()[key].get() : nullptr;
+  }
 };
 
 #endif // #ifndef ENDGAME_H_INCLUDED