From f49e7e17e3b4e66fb70f0a9416ed65b5e4516d7d Mon Sep 17 00:00:00 2001 From: H.G.Muller Date: Tue, 20 Oct 2015 17:30:34 +0200 Subject: [PATCH] Fix sortng of mate scores 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 | 10 +++++++++- 1 files changed, 9 insertions(+), 1 deletions(-) diff --git a/engineoutput.c b/engineoutput.c index d6fde3c..0bfd8b5 100644 --- a/engineoutput.c +++ b/engineoutput.c @@ -402,6 +402,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) { int i, offs = 0, newScore = ed->score, n = ed->which; @@ -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; -- 1.7.0.4