mirror of
https://github.com/sockspls/badfish
synced 2025-07-11 19:49:14 +00:00
Start searching for a repetition from the 4th ply behind
A position can never repeat the one on the previous move. Thus we can start searching for a repetition from the 4th ply behind. In the case: std::min(st->rule50, st->pliesFromNull) < 4 We don't need to do any more calculations. This case happens very often - in more than a half of all calls of the function. No functional change.
This commit is contained in:
parent
76d113f5f0
commit
797602938d
1 changed files with 10 additions and 4 deletions
|
@ -1079,14 +1079,20 @@ bool Position::is_draw() const {
|
|||
if (st->rule50 > 99 && (!checkers() || MoveList<LEGAL>(*this).size()))
|
||||
return true;
|
||||
|
||||
StateInfo* stp = st;
|
||||
for (int i = 2, e = std::min(st->rule50, st->pliesFromNull); i <= e; i += 2)
|
||||
{
|
||||
int e = std::min(st->rule50, st->pliesFromNull);
|
||||
|
||||
if (e < 4)
|
||||
return false;
|
||||
|
||||
StateInfo* stp = st->previous->previous;
|
||||
|
||||
do {
|
||||
stp = stp->previous->previous;
|
||||
|
||||
if (stp->key == st->key)
|
||||
return true; // Draw at first repetition
|
||||
}
|
||||
|
||||
} while ((e -= 2) >= 4);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue