+class TimeManagement {
+public:
+ void init(Search::LimitsType& limits, Color us, int ply, TimePoint now);
+ void pv_instability(double bestMoveChanges) { unstablePvFactor = 1 + bestMoveChanges; }
+ int available() const { return int(optimumTime * unstablePvFactor * 0.76); }
+ int maximum() const { return maximumTime; }
+ int elapsed() const { return int(Search::Limits.npmsec ? Search::RootPos.nodes_searched() : now() - start); }
+
+ int64_t availableNodes; // When in 'nodes as time' mode
+
+private:
+ TimePoint start;
+ int optimumTime;
+ int maximumTime;
+ double unstablePvFactor;