book.open(Options["Book File"].value<string>());
Move bookMove = book.probe(pos, Options["Best Book Move"].value<bool>());
- if (bookMove != MOVE_NONE)
- {
- if (!Signals.stop && (Limits.ponder || Limits.infinite))
- Threads.wait_for_stop_or_ponderhit();
- cout << "bestmove " << bookMove << endl;
- return;
+ if ( bookMove != MOVE_NONE
+ && std::count(RootMoves.begin(), RootMoves.end(), bookMove))
+ {
+ std::swap(RootMoves[0], *std::find(RootMoves.begin(), RootMoves.end(), bookMove));
+ goto finish;
}
}
pos.undo_move(RootMoves[0].pv[0]);
}
+finish:
+
// When we reach max depth we arrive here even without a StopRequest, but if
// we are pondering or in infinite search, we shouldn't print the best move
// before we are told to do so.