Fix sortng of mate scores
authorH.G.Muller <hgm@hgm-xboard.(none)>
Tue, 20 Oct 2015 15:30:34 +0000 (17:30 +0200)
committerH.G.Muller <hgm@hgm-xboard.(none)>
Tue, 20 Oct 2015 15:30:34 +0000 (17:30 +0200)
With the new convention for mate scores (100000+DTM), lower numbers
represent faster mates and thus better scores, and the sorting of PVs
in the Engine Output window now takes that into account.

engineoutput.c

index d6fde3c..0bfd8b5 100644 (file)
@@ -401,6 +401,14 @@ SetEngineColorIcon (int which)
 
 // [HGM] multivar: sort Thinking Output within one depth on score
 
+static int
+MateFlip (int n)
+{   // map mate-score to monotonous scale, so sorting compares them correctly
+    if(n >=  MATE_SCORE) return 2*MATE_SCORE - n;
+    if(n <= -MATE_SCORE) return -2*MATE_SCORE - n;
+    return n;
+}
+
 static int
 InsertionPoint (int len, EngineOutputData *ed)
 {
@@ -425,7 +433,7 @@ InsertionPoint (int len, EngineOutputData *ed)
                keys[i+n+2] = ed->moveKey;
                fail[i+n+2] = failType;
                if(ed->moveKey != keys[i+n] && // same move always tops previous one (as a higher score must be a fail low)
-                  newScore < scores[i+n] && fail[i+n] == ' ') break;
+                  MateFlip(newScore) < MateFlip(scores[i+n]) && fail[i+n] == ' ') break;
                // if it had higher score as previous, move previous in stead
                scores[i+n+2] = ed->moveKey == keys[i+n] ? newScore : scores[i+n]; // correct scores of fail-low/high searches
                textEnd[i+n+2] = textEnd[i+n] + len;