// pointer to point to the new, ready to be updated, state.
struct ReducedStateInfo {
Key pawnKey, materialKey;
- int castleRights, rule50, ply, pliesFromNull;
+ int castleRights, rule50, gamePly, pliesFromNull;
Square epSquare;
Score value;
Value npMaterial[2];
// Save the current key to the history[] array, in order to be able to
// detect repetition draws.
- history[st->ply++] = key;
+ history[st->gamePly++] = key;
// Update side to move
key ^= zobSideToMove;
}
// Prefetch TT access as soon as we know key is updated
- TT.prefetch(key);
+ prefetch((char*)TT.first_entry(key));
// Move the piece
Bitboard move_bb = make_move_bb(from, to);
// Save the current key to the history[] array, in order to be able to
// detect repetition draws.
- history[st->ply++] = st->key;
+ history[st->gamePly++] = st->key;
// Update the necessary information
if (st->epSquare != SQ_NONE)
st->key ^= zobEp[st->epSquare];
st->key ^= zobSideToMove;
- TT.prefetch(st->key);
+ prefetch((char*)TT.first_entry(st->key));
sideToMove = opposite_color(sideToMove);
st->epSquare = SQ_NONE;
// Update the necessary information
sideToMove = opposite_color(sideToMove);
st->rule50--;
- st->ply--;
+ st->gamePly--;
}
}
-/// Position::reset_ply() simply sets ply to 0. It is used from the
+/// Position::reset_game_ply() simply sets gamePly to 0. It is used from the
/// UCI interface code, whenever a non-reversible move is made in a
/// 'position fen <fen> moves m1 m2 ...' command. This makes it possible
/// for the program to handle games of arbitrary length, as long as the GUI
/// handles draws by the 50 move rule correctly.
-void Position::reset_ply() {
+void Position::reset_game_ply() {
- st->ply = 0;
+ st->gamePly = 0;
}
if (st->rule50 > 100 || (st->rule50 == 100 && !is_check()))
return true;
- assert(st->ply >= st->rule50);
-
// Draw by repetition?
- for (int i = 4, e = Min(st->rule50, st->pliesFromNull); i <= e; i += 2)
- if (history[st->ply - i] == st->key)
+ for (int i = 4, e = Min(Min(st->gamePly, st->rule50), st->pliesFromNull); i <= e; i += 2)
+ if (history[st->gamePly - i] == st->key)
return true;
return false;