+/// RootMove struct is used for moves at the root of the tree. For each root
+/// move we store a score, a node count, and a PV (really a refutation in the
+/// case of moves which fail low). Score is normally set at -VALUE_INFINITE for
+/// all non-pv moves.
+struct RootMove {
+
+ RootMove(Move m) : score(-VALUE_INFINITE), previousScore(-VALUE_INFINITE), pv(1, m) {}
+
+ bool operator<(const RootMove& m) const { return score > m.score; } // Ascending sort
+ bool operator==(const Move& m) const { return pv[0] == m; }
+
+ void insert_pv_in_tt(Position& pos);
+
+ Value score;
+ Value previousScore;
+ std::vector<Move> pv;
+};
+
+typedef std::vector<RootMove> RootMoveVector;
+
+/// The LimitsType struct stores information sent by GUI about available time