Fix book move with searchmoves compatibility
authorMarco Costalba <mcostalba@gmail.com>
Thu, 15 Dec 2011 06:25:45 +0000 (07:25 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Fri, 16 Dec 2011 06:23:24 +0000 (07:23 +0100)
Do not return the book move if is not among the
RootMoves,in particular if we have been asked to
search on a move subset with "searchmoves" then
return book move only if it is among this subset.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
src/search.cpp

index ef247420d161345abb37ed6e18127a61db9c575b..4a4e058f9f731436e476642d0f4f0bbced3209ec 100644 (file)
@@ -328,13 +328,12 @@ void Search::think() {
           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;
       }
   }
 
@@ -404,6 +403,8 @@ void Search::think() {
       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.