along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include <cassert>
#include <iostream>
+#include "movegen.h"
#include "search.h"
#include "thread.h"
#include "ucioption.h"
if (do_terminate)
return;
- think(); // This is the search entry point
+ Search::think();
}
}
// the search to finish.
void ThreadsManager::start_thinking(const Position& pos, const LimitsType& limits,
- const std::vector<Move>& searchMoves, bool asyncMode) {
+ const std::set<Move>& searchMoves, bool async) {
Thread& main = threads[0];
lock_grab(&main.sleepLock);
// 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<MV_LEGAL> 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
Signals.stopOnPonderhit = Signals.firstRootMove = 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);