| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| #ifndef SEARCH_H_INCLUDED |
| #define SEARCH_H_INCLUDED |
|
|
| #include <vector> |
|
|
| #include "misc.h" |
| #include "movepick.h" |
| #include "types.h" |
|
|
| namespace Stockfish { |
|
|
| class Position; |
|
|
| namespace Search { |
|
|
|
|
| |
| |
| |
|
|
| struct Stack { |
| Move* pv; |
| PieceToHistory* continuationHistory; |
| int ply; |
| Move currentMove; |
| Move excludedMove; |
| Move killers[2]; |
| Value staticEval; |
| int statScore; |
| int moveCount; |
| bool inCheck; |
| bool ttPv; |
| bool ttHit; |
| int doubleExtensions; |
| int cutoffCnt; |
| }; |
|
|
|
|
| |
| |
| |
|
|
| struct RootMove { |
|
|
| explicit RootMove(Move m) : pv(1, m) {} |
| bool extract_ponder_from_tt(Position& pos); |
| bool operator==(const Move& m) const { return pv[0] == m; } |
| bool operator<(const RootMove& m) const { |
| return m.score != score ? m.score < score |
| : m.previousScore < previousScore; |
| } |
|
|
| Value score = -VALUE_INFINITE; |
| Value previousScore = -VALUE_INFINITE; |
| Value averageScore = -VALUE_INFINITE; |
| bool scoreLowerbound = false; |
| bool scoreUpperbound = false; |
| int selDepth = 0; |
| int tbRank = 0; |
| Value tbScore; |
| std::vector<Move> pv; |
| }; |
|
|
| typedef std::vector<RootMove> RootMoves; |
|
|
|
|
| |
| |
|
|
| struct LimitsType { |
|
|
| LimitsType() { |
| time[WHITE] = time[BLACK] = inc[WHITE] = inc[BLACK] = npmsec = movetime = TimePoint(0); |
| movestogo = depth = mate = perft = infinite = 0; |
| nodes = 0; |
| } |
|
|
| bool use_time_management() const { |
| return time[WHITE] || time[BLACK]; |
| } |
|
|
| std::vector<Move> searchmoves; |
| TimePoint time[COLOR_NB], inc[COLOR_NB], npmsec, movetime, startTime; |
| int movestogo, depth, mate, perft, infinite; |
| int64_t nodes; |
| }; |
|
|
| extern LimitsType Limits; |
|
|
| void init(); |
| void clear(); |
|
|
| } |
|
|
| } |
|
|
| #endif |
|
|