Fix an off-by-one bug in multi pv print
authorMarco Costalba <mcostalba@gmail.com>
Fri, 2 Nov 2012 23:30:46 +0000 (00:30 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Fri, 2 Nov 2012 23:36:40 +0000 (00:36 +0100)
We send to GUI multi-pv info after each cycle,
not just once at the end of the PV loop. This is
because at high depths a single root search can
be very slow and we want to update the gui as
soon as we have a new PV score.

Idea is good but implementation is broken because
sort() takes as arguments a pointer to the first
element and one past the last element.

So fix the bug and rename sort arguments to better
reflect their meaning.

Another hit by Hongzhi Cheng.  Impressive!

No functional change.

src/search.cpp
src/types.h

index 8dc1f85d9e51a30194f48a3c96d2170aa467259a..bfade6d09b52b4b89b1588d1483166ef1b898131 100644 (file)
@@ -394,7 +394,7 @@ namespace {
             }
 
             // Sort the PV lines searched so far and update the GUI
-            sort<RootMove>(RootMoves.begin(), RootMoves.begin() + PVIdx);
+            sort<RootMove>(RootMoves.begin(), RootMoves.begin() + PVIdx + 1);
             sync_cout << uci_pv(pos, depth, alpha, beta) << sync_endl;
         }
 
index 1842eb2a3ea1eb2b08b9663644f575a7b4347256..9b36fd89fde9f9505dc54a2093bab49711cbf651 100644 (file)
@@ -490,15 +490,15 @@ inline const std::string square_to_string(Square s) {
 /// Our insertion sort implementation, works with pointers and iterators and is
 /// guaranteed to be stable, as is needed.
 template<typename T, typename K>
-void sort(K first, K last)
+void sort(K begin, K end)
 {
   T tmp;
   K p, q;
 
-  for (p = first + 1; p < last; p++)
+  for (p = begin + 1; p < end; p++)
   {
       tmp = *p;
-      for (q = p; q != first && *(q-1) < tmp; --q)
+      for (q = p; q != begin && *(q-1) < tmp; --q)
           *q = *(q-1);
       *q = tmp;
   }