X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fposition.cpp;h=feaeee22c606309a474c917bad77bfcc310d9b5d;hb=0587c5b605fc9f0c23dab3a890b2986276c259cb;hp=3f81994611975aaaf31c8f397b1613cf85edb297;hpb=c1f4000426dd799cfac97298c539e618909c057f;p=stockfish diff --git a/src/position.cpp b/src/position.cpp index 3f819946..feaeee22 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -1467,7 +1467,7 @@ Value Position::compute_non_pawn_material(Color c) const { /// Position::is_draw() tests whether the position is drawn by material, /// repetition, or the 50 moves rule. It does not detect stalemates, this /// must be done by the search. -template +template bool Position::is_draw() const { // Draw by material? @@ -1482,7 +1482,7 @@ bool Position::is_draw() const { // Draw by repetition? if (!SkipRepetition) { - int i = 4, e = std::min(st->rule50, st->pliesFromNull); + int i = 4, e = std::min(st->rule50, st->pliesFromNull), rep_count=0; if (i <= e) { @@ -1492,7 +1492,10 @@ bool Position::is_draw() const { stp = stp->previous->previous; if (stp->key == st->key) - return true; + { + if(SkipThreeFoldCheck) return true; + else if(++rep_count>=2) return true; + } i +=2; @@ -1504,8 +1507,9 @@ bool Position::is_draw() const { } // Explicit template instantiations -template bool Position::is_draw() const; -template bool Position::is_draw() const; +template bool Position::is_draw() const; +template bool Position::is_draw() const; +template bool Position::is_draw() const; /// Position::flip() flips position with the white and black sides reversed. This