mirror of
https://github.com/sockspls/badfish
synced 2025-07-11 19:49:14 +00:00
Rewrite previous patch using only one counter
Use only rule50 and retire pliesFromNull. No functional change. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
parent
64d6ba2e98
commit
d892063cd3
2 changed files with 6 additions and 9 deletions
|
@ -703,7 +703,7 @@ void Position::do_move(Move m, StateInfo& newSt, Bitboard dcCandidates) {
|
||||||
// pointer to point to the new, ready to be updated, state.
|
// pointer to point to the new, ready to be updated, state.
|
||||||
struct ReducedStateInfo {
|
struct ReducedStateInfo {
|
||||||
Key key, pawnKey, materialKey;
|
Key key, pawnKey, materialKey;
|
||||||
int castleRights, rule50, pliesFromNull;
|
int castleRights, rule50;
|
||||||
Square epSquare;
|
Square epSquare;
|
||||||
Value mgValue, egValue;
|
Value mgValue, egValue;
|
||||||
Value npMaterial[2];
|
Value npMaterial[2];
|
||||||
|
@ -724,7 +724,6 @@ void Position::do_move(Move m, StateInfo& newSt, Bitboard dcCandidates) {
|
||||||
// Increment the 50 moves rule draw counter. Resetting it to zero in the
|
// Increment the 50 moves rule draw counter. Resetting it to zero in the
|
||||||
// case of non-reversible moves is taken care of later.
|
// case of non-reversible moves is taken care of later.
|
||||||
st->rule50++;
|
st->rule50++;
|
||||||
st->pliesFromNull++;
|
|
||||||
|
|
||||||
if (move_is_castle(m))
|
if (move_is_castle(m))
|
||||||
{
|
{
|
||||||
|
@ -1239,11 +1238,11 @@ void Position::do_null_move(StateInfo& backupSt) {
|
||||||
// Note that differently from normal case here backupSt is actually used as
|
// Note that differently from normal case here backupSt is actually used as
|
||||||
// a backup storage not as a new state to be used.
|
// a backup storage not as a new state to be used.
|
||||||
backupSt.key = st->key;
|
backupSt.key = st->key;
|
||||||
|
backupSt.rule50 = st->rule50;
|
||||||
backupSt.epSquare = st->epSquare;
|
backupSt.epSquare = st->epSquare;
|
||||||
backupSt.mgValue = st->mgValue;
|
backupSt.mgValue = st->mgValue;
|
||||||
backupSt.egValue = st->egValue;
|
backupSt.egValue = st->egValue;
|
||||||
backupSt.previous = st->previous;
|
backupSt.previous = st->previous;
|
||||||
backupSt.pliesFromNull = st->pliesFromNull;
|
|
||||||
st->previous = &backupSt;
|
st->previous = &backupSt;
|
||||||
|
|
||||||
// Save the current key to the history[] array, in order to be able to
|
// Save the current key to the history[] array, in order to be able to
|
||||||
|
@ -1259,8 +1258,7 @@ void Position::do_null_move(StateInfo& backupSt) {
|
||||||
|
|
||||||
sideToMove = opposite_color(sideToMove);
|
sideToMove = opposite_color(sideToMove);
|
||||||
st->epSquare = SQ_NONE;
|
st->epSquare = SQ_NONE;
|
||||||
st->rule50++;
|
st->rule50 = 0;
|
||||||
st->pliesFromNull = 0;
|
|
||||||
gamePly++;
|
gamePly++;
|
||||||
|
|
||||||
st->mgValue += (sideToMove == WHITE)? TempoValueMidgame : -TempoValueMidgame;
|
st->mgValue += (sideToMove == WHITE)? TempoValueMidgame : -TempoValueMidgame;
|
||||||
|
@ -1278,15 +1276,14 @@ void Position::undo_null_move() {
|
||||||
// Restore information from the our backup StateInfo object
|
// Restore information from the our backup StateInfo object
|
||||||
StateInfo* backupSt = st->previous;
|
StateInfo* backupSt = st->previous;
|
||||||
st->key = backupSt->key;
|
st->key = backupSt->key;
|
||||||
|
st->rule50 = backupSt->rule50;
|
||||||
st->epSquare = backupSt->epSquare;
|
st->epSquare = backupSt->epSquare;
|
||||||
st->mgValue = backupSt->mgValue;
|
st->mgValue = backupSt->mgValue;
|
||||||
st->egValue = backupSt->egValue;
|
st->egValue = backupSt->egValue;
|
||||||
st->previous = backupSt->previous;
|
st->previous = backupSt->previous;
|
||||||
st->pliesFromNull = backupSt->pliesFromNull;
|
|
||||||
|
|
||||||
// Update the necessary information
|
// Update the necessary information
|
||||||
sideToMove = opposite_color(sideToMove);
|
sideToMove = opposite_color(sideToMove);
|
||||||
st->rule50--;
|
|
||||||
gamePly--;
|
gamePly--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1687,7 +1684,7 @@ bool Position::is_draw() const {
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// Draw by repetition?
|
// Draw by repetition?
|
||||||
for (int i = 2; i < Min(Min(gamePly, st->rule50), st->pliesFromNull); i += 2)
|
for (int i = 2; i < Min(gamePly, st->rule50); i += 2)
|
||||||
if (history[gamePly - i] == st->key)
|
if (history[gamePly - i] == st->key)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
|
|
@ -88,7 +88,7 @@ enum Phase {
|
||||||
|
|
||||||
struct StateInfo {
|
struct StateInfo {
|
||||||
Key key, pawnKey, materialKey;
|
Key key, pawnKey, materialKey;
|
||||||
int castleRights, rule50, pliesFromNull;
|
int castleRights, rule50;
|
||||||
Square epSquare;
|
Square epSquare;
|
||||||
Value mgValue, egValue;
|
Value mgValue, egValue;
|
||||||
Value npMaterial[2];
|
Value npMaterial[2];
|
||||||
|
|
Loading…
Add table
Reference in a new issue