summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
b7bc0d4)
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
// pointer to point to the new, ready to be updated, state.
struct ReducedStateInfo {
Key pawnKey, materialKey;
// pointer to point to the new, ready to be updated, state.
struct ReducedStateInfo {
Key pawnKey, materialKey;
- int castleRights, rule50, pliesFromNull;
+ int castleRights, rule50, gamePly, pliesFromNull;
Square epSquare;
Score value;
Value npMaterial[2];
Square epSquare;
Score value;
Value npMaterial[2];
// Save the current key to the history[] array, in order to be able to
// detect repetition draws.
// Save the current key to the history[] array, in order to be able to
// detect repetition draws.
- history[gamePly] = key;
- gamePly++;
+ history[st->gamePly++] = key;
// Update side to move
key ^= zobSideToMove;
// Update side to move
key ^= zobSideToMove;
assert(is_ok());
assert(move_is_ok(m));
assert(is_ok());
assert(move_is_ok(m));
sideToMove = opposite_color(sideToMove);
if (move_is_castle(m))
sideToMove = opposite_color(sideToMove);
if (move_is_castle(m))
pieceList[us][PAWN][index[to]] = to;
}
pieceList[us][PAWN][index[to]] = to;
}
// Put the piece back at the source square
Bitboard move_bb = make_move_bb(to, from);
do_move_bb(&(byColorBB[us]), move_bb);
// Put the piece back at the source square
Bitboard move_bb = make_move_bb(to, from);
do_move_bb(&(byColorBB[us]), move_bb);
// Save the current key to the history[] array, in order to be able to
// detect repetition draws.
// Save the current key to the history[] array, in order to be able to
// detect repetition draws.
- history[gamePly] = st->key;
+ history[st->gamePly++] = st->key;
// Update the necessary information
if (st->epSquare != SQ_NONE)
// Update the necessary information
if (st->epSquare != SQ_NONE)
st->rule50++;
st->pliesFromNull = 0;
st->value += (sideToMove == WHITE) ? TempoValue : -TempoValue;
st->rule50++;
st->pliesFromNull = 0;
st->value += (sideToMove == WHITE) ? TempoValue : -TempoValue;
// Update the necessary information
sideToMove = opposite_color(sideToMove);
st->rule50--;
// Update the necessary information
sideToMove = opposite_color(sideToMove);
st->rule50--;
pieceList[0][i][j] = pieceList[1][i][j] = SQ_NONE;
sideToMove = WHITE;
pieceList[0][i][j] = pieceList[1][i][j] = SQ_NONE;
sideToMove = WHITE;
initialKFile = FILE_E;
initialKRFile = FILE_H;
initialQRFile = FILE_A;
initialKFile = FILE_E;
initialKRFile = FILE_H;
initialQRFile = FILE_A;
void Position::reset_game_ply() {
void Position::reset_game_ply() {
return true;
// Draw by repetition?
return true;
// Draw by repetition?
- for (int i = 4; i <= Min(Min(gamePly, st->rule50), st->pliesFromNull); i += 2)
- if (history[gamePly - 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;
return true;
return false;
struct StateInfo {
Key pawnKey, materialKey;
struct StateInfo {
Key pawnKey, materialKey;
- int castleRights, rule50, pliesFromNull;
+ int castleRights, rule50, gamePly, pliesFromNull;
Square epSquare;
Score value;
Value npMaterial[2];
Square epSquare;
Score value;
Value npMaterial[2];
// Other info
Color sideToMove;
// Other info
Color sideToMove;
Key history[MaxGameLength];
int castleRightsMask[64];
StateInfo startState;
Key history[MaxGameLength];
int castleRightsMask[64];
StateInfo startState;