3 Copyright (c) Scott Gasch
11 Function for detecting a draw by repetition from the search tree.
19 $Id: draw.c 345 2007-12-02 22:56:42Z scott $
26 IsDraw(SEARCHER_THREAD_CONTEXT *ctx)
32 // Recognize 50-moves w/o progress draw rule
34 if (ctx->sPosition.uFifty >= 100)
40 // Check for repeated positions if needed.
42 if (ctx->sPosition.uFifty < 4)
47 u64CurrentSig = (ctx->sPosition.u64NonPawnSig ^
48 ctx->sPosition.u64PawnSig);
50 while(uPly < MAX_PLY_PER_SEARCH)
53 if ((GET_COLOR(ctx->sPlyInfo[uPly].mv.pMoved) !=
54 ctx->sPosition.uToMove) &&
55 (ctx->sPlyInfo[uPly].mv.uMove != 0))
59 ASSERT(ctx->sPlyInfo[uPly].u64Sig == (ctx->sPlyInfo[uPly].u64PawnSig ^
60 ctx->sPlyInfo[uPly].u64NonPawnSig));
62 if (ctx->sPlyInfo[uPly].u64Sig == u64CurrentSig)
67 if (IS_PAWN(ctx->sPlyInfo[uPly].mv.pMoved) ||
68 (ctx->sPlyInfo[uPly].mv.pCaptured))
76 // Keep looking in the official game record.
78 return(DoesSigAppearInOfficialGameList(u64CurrentSig));