Use if/else instead of goto
authorMarco Costalba <mcostalba@gmail.com>
Mon, 10 Nov 2014 13:46:05 +0000 (14:46 +0100)
committerJoona Kiiski <joona.kiiski@gmail.com>
Wed, 12 Nov 2014 21:02:20 +0000 (21:02 +0000)
Real men jump/branch by hand...but
we prefer the humble way.

Moved also some uci info code where it
belongs, while there.

No functional change.

Resolves #110

src/search.cpp

index 3ba2768..63481d3 100644 (file)
@@ -191,26 +191,19 @@ void Search::think() {
       sync_cout << "info depth 0 score "
                 << UCI::format_value(RootPos.checkers() ? -VALUE_MATE : VALUE_DRAW)
                 << sync_endl;
-
-      goto finalize;
   }
+  else
+  {
+      for (size_t i = 0; i < Threads.size(); ++i)
+          Threads[i]->maxPly = 0;
 
-  // Reset the threads, still sleeping: will wake up at split time
-  for (size_t i = 0; i < Threads.size(); ++i)
-      Threads[i]->maxPly = 0;
-
-  Threads.timer->run = true;
-  Threads.timer->notify_one(); // Wake up the recurring timer
-
-  id_loop(RootPos); // Let's start searching !
-
-  Threads.timer->run = false; // Stop the timer
+      Threads.timer->run = true;
+      Threads.timer->notify_one(); // Wake up the recurring timer
 
-finalize:
+      id_loop(RootPos); // Let's start searching !
 
-  // When search is stopped this info is not printed
-  sync_cout << "info nodes " << RootPos.nodes_searched()
-            << " time " << Time::now() - SearchTime + 1 << sync_endl;
+      Threads.timer->run = false;
+  }
 
   // When we reach the maximum depth, we can arrive here without a raise of
   // Signals.stop. However, if we are pondering or in an infinite search,
@@ -223,7 +216,6 @@ finalize:
       RootPos.this_thread()->wait_for(Signals.stop);
   }
 
-  // Best move could be MOVE_NONE when searching on a stalemate position
   sync_cout << "bestmove " << UCI::format_move(RootMoves[0].pv[0], RootPos.is_chess960())
             << " ponder "  << UCI::format_move(RootMoves[0].pv[1], RootPos.is_chess960())
             << sync_endl;
@@ -342,9 +334,12 @@ namespace {
             // Sort the PV lines searched so far and update the GUI
             std::stable_sort(RootMoves.begin(), RootMoves.begin() + PVIdx + 1);
 
-            if (   !Signals.stop
-                && (   PVIdx + 1 == std::min(multiPV, RootMoves.size())
-                    || Time::now() - SearchTime > 3000))
+            if (Signals.stop)
+                sync_cout << "info nodes " << RootPos.nodes_searched()
+                          << " time " << Time::now() - SearchTime << sync_endl;
+
+            else if (   PVIdx + 1 == std::min(multiPV, RootMoves.size())
+                     || Time::now() - SearchTime > 3000)
                 sync_cout << uci_pv(pos, depth, alpha, beta) << sync_endl;
         }