struct RootMove {
- RootMove(Move m) : score(-VALUE_INFINITE), previousScore(-VALUE_INFINITE), pv(1, m) {}
+ explicit RootMove(Move m) : 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);
bool extract_ponder_from_tt(Position& pos);
- Value score;
- Value previousScore;
+ Value score = -VALUE_INFINITE;
+ Value previousScore = -VALUE_INFINITE;
std::vector<Move> pv;
};
struct LimitsType {
LimitsType() { // Init explicitly due to broken value-initialization of non POD in MSVC
- nodes = time[WHITE] = time[BLACK] = inc[WHITE] = inc[BLACK] = movestogo =
+ nodes = time[WHITE] = time[BLACK] = inc[WHITE] = inc[BLACK] = npmsec = movestogo =
depth = movetime = mate = infinite = ponder = 0;
}
}
std::vector<Move> searchmoves;
- int time[COLOR_NB], inc[COLOR_NB], movestogo, depth, movetime, mate, infinite, ponder;
+ int time[COLOR_NB], inc[COLOR_NB], npmsec, movestogo, depth, movetime, mate, infinite, ponder;
int64_t nodes;
};
extern LimitsType Limits;
extern RootMoveVector RootMoves;
extern Position RootPos;
-extern Time::point SearchTime;
extern StateStackPtr SetupStates;
void init();
void think();
+void reset();
template<bool Root> uint64_t perft(Position& pos, Depth depth);
} // namespace Search