Code: Select all
static bool PositionTestEpCaptureMove(Position * const positionptr, const Move move)
{
// This routine tests the legality of the given en passant capture in the given position.
Tracker * const trackerptr = &positionptr->tracker;
Man * const manvec = positionptr->board.manvec;
const Color evil = positionptr->fss.evil;
const Man frman = GetFrMan(move);
const Sq frsq = GetFrSq(move);
const Sq tosq = GetToSq(move);
const Sq vpsq = NextSq[CvColorToAdvDir[evil]][tosq];
TrackerCapture(trackerptr, vpsq);
TrackerMovement(trackerptr, frsq, tosq);
manvec[vpsq] = ManVacant;
manvec[frsq] = ManVacant;
manvec[tosq] = frman;
const bool isbroken = PositionCalcGoodInCheck(positionptr);
TrackerMovement(trackerptr, tosq, frsq);
TrackerRestore(trackerptr);
manvec[vpsq] = CvColorToPawn[evil];
manvec[frsq] = frman;
manvec[tosq] = ManVacant;
return !isbroken;
}