X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fthread.cpp;h=c7d9d4104e248642170e594813111bef6de789ac;hb=04ff9c2548eb4d8b8a59db23f7212c7a8cdd25aa;hp=cb0ab5e9c258eea998fe9c5892e77e88562308c2;hpb=f80c50bcddfd02c1b93dcde067d6a7362dda53a2;p=stockfish diff --git a/src/thread.cpp b/src/thread.cpp index cb0ab5e9..c7d9d410 100644 --- a/src/thread.cpp +++ b/src/thread.cpp @@ -17,8 +17,10 @@ along with this program. If not, see . */ +#include #include +#include "movegen.h" #include "search.h" #include "thread.h" #include "ucioption.h" @@ -420,7 +422,7 @@ void Thread::main_loop() { if (do_terminate) return; - think(); // This is the search entry point + Search::think(); } } @@ -431,7 +433,7 @@ void Thread::main_loop() { // the search to finish. void ThreadsManager::start_thinking(const Position& pos, const LimitsType& limits, - const std::vector& searchMoves, bool asyncMode) { + const std::set& searchMoves, bool async) { Thread& main = threads[0]; lock_grab(&main.sleepLock); @@ -443,15 +445,22 @@ void ThreadsManager::start_thinking(const Position& pos, const LimitsType& limit // Copy input arguments to initialize the search RootPosition.copy(pos, 0); Limits = limits; - SearchMoves = searchMoves; + RootMoves.clear(); + + // Populate RootMoves with all the legal moves (default) or, if a searchMoves + // set is given, with the subset of legal moves to search. + for (MoveList ml(pos); !ml.end(); ++ml) + if (searchMoves.empty() || searchMoves.count(ml.move())) + RootMoves.push_back(RootMove(ml.move())); // Reset signals before to start the new search - memset((void*)&Signals, 0, sizeof(Signals)); + Signals.stopOnPonderhit = Signals.firstRootMove = false; + Signals.stop = Signals.failedLowAtRoot = false; main.do_sleep = false; cond_signal(&main.sleepCond); // Wake up main thread and start searching - if (!asyncMode) + if (!async) while (!main.do_sleep) cond_wait(&sleepCond, &main.sleepLock);