mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 16:53:09 +00:00
Passing UndoInfo is not needed anymore when undoing the move
We store it now in the same UndoInfo struct as 'previous' field, so when doing a move we also know where to get the previous info when undoing the back the move. This is needed for future patches and is a nice cleanup anyway. No functional change. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
parent
1b0fee9b17
commit
9b257ba29d
3 changed files with 24 additions and 24 deletions
|
@ -706,6 +706,7 @@ void Position::do_move(Move m, UndoInfo& u) {
|
||||||
// captured piece, which is taken care of later.
|
// captured piece, which is taken care of later.
|
||||||
u = undoInfoUnion;
|
u = undoInfoUnion;
|
||||||
u.capture = NO_PIECE_TYPE;
|
u.capture = NO_PIECE_TYPE;
|
||||||
|
previous = &u;
|
||||||
|
|
||||||
// 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
|
||||||
// detect repetition draws.
|
// detect repetition draws.
|
||||||
|
@ -722,7 +723,7 @@ void Position::do_move(Move m, UndoInfo& u) {
|
||||||
if (move_is_castle(m))
|
if (move_is_castle(m))
|
||||||
do_castle_move(m);
|
do_castle_move(m);
|
||||||
else if (move_promotion(m))
|
else if (move_promotion(m))
|
||||||
do_promotion_move(m, u);
|
do_promotion_move(m);
|
||||||
else if (move_is_ep(m))
|
else if (move_is_ep(m))
|
||||||
do_ep_move(m);
|
do_ep_move(m);
|
||||||
else
|
else
|
||||||
|
@ -977,7 +978,7 @@ void Position::do_castle_move(Move m) {
|
||||||
/// UndoInfo object, which has been initialized in Position::do_move, is
|
/// UndoInfo object, which has been initialized in Position::do_move, is
|
||||||
/// used to store the captured piece (if any).
|
/// used to store the captured piece (if any).
|
||||||
|
|
||||||
void Position::do_promotion_move(Move m, UndoInfo &u) {
|
void Position::do_promotion_move(Move m) {
|
||||||
|
|
||||||
Color us, them;
|
Color us, them;
|
||||||
Square from, to;
|
Square from, to;
|
||||||
|
@ -1000,7 +1001,7 @@ void Position::do_promotion_move(Move m, UndoInfo &u) {
|
||||||
|
|
||||||
if (capture)
|
if (capture)
|
||||||
{
|
{
|
||||||
u.capture = capture;
|
previous->capture = capture;
|
||||||
do_capture_move(m, capture, them, to);
|
do_capture_move(m, capture, them, to);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1156,7 +1157,7 @@ void Position::do_ep_move(Move m) {
|
||||||
/// important that Position::undo_move is called with the same move and UndoInfo
|
/// important that Position::undo_move is called with the same move and UndoInfo
|
||||||
/// object as the earlier call to Position::do_move.
|
/// object as the earlier call to Position::do_move.
|
||||||
|
|
||||||
void Position::undo_move(Move m, const UndoInfo &u) {
|
void Position::undo_move(Move m) {
|
||||||
|
|
||||||
assert(is_ok());
|
assert(is_ok());
|
||||||
assert(move_is_ok(m));
|
assert(move_is_ok(m));
|
||||||
|
@ -1166,19 +1167,19 @@ void Position::undo_move(Move m, const UndoInfo &u) {
|
||||||
|
|
||||||
// Restore information from our UndoInfo object (except the captured piece,
|
// Restore information from our UndoInfo object (except the captured piece,
|
||||||
// which is taken care of later)
|
// which is taken care of later)
|
||||||
undoInfoUnion = u;
|
undoInfoUnion = *previous;
|
||||||
|
|
||||||
if (move_is_castle(m))
|
if (move_is_castle(m))
|
||||||
undo_castle_move(m);
|
undo_castle_move(m);
|
||||||
else if (move_promotion(m))
|
else if (move_promotion(m))
|
||||||
undo_promotion_move(m, u);
|
undo_promotion_move(m);
|
||||||
else if (move_is_ep(m))
|
else if (move_is_ep(m))
|
||||||
undo_ep_move(m);
|
undo_ep_move(m);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Color us, them;
|
Color us, them;
|
||||||
Square from, to;
|
Square from, to;
|
||||||
PieceType piece, capture;
|
PieceType piece;
|
||||||
|
|
||||||
us = side_to_move();
|
us = side_to_move();
|
||||||
them = opposite_color(us);
|
them = opposite_color(us);
|
||||||
|
@ -1208,8 +1209,6 @@ void Position::undo_move(Move m, const UndoInfo &u) {
|
||||||
pieceList[us][piece][index[to]] = from;
|
pieceList[us][piece][index[to]] = from;
|
||||||
index[from] = index[to];
|
index[from] = index[to];
|
||||||
|
|
||||||
capture = u.capture;
|
|
||||||
|
|
||||||
if (capture)
|
if (capture)
|
||||||
{
|
{
|
||||||
assert(capture != KING);
|
assert(capture != KING);
|
||||||
|
@ -1309,11 +1308,11 @@ void Position::undo_castle_move(Move m) {
|
||||||
/// function. The UndoInfo object, which has been initialized in
|
/// function. The UndoInfo object, which has been initialized in
|
||||||
/// Position::do_move, is used to put back the captured piece (if any).
|
/// Position::do_move, is used to put back the captured piece (if any).
|
||||||
|
|
||||||
void Position::undo_promotion_move(Move m, const UndoInfo &u) {
|
void Position::undo_promotion_move(Move m) {
|
||||||
|
|
||||||
Color us, them;
|
Color us, them;
|
||||||
Square from, to;
|
Square from, to;
|
||||||
PieceType capture, promotion;
|
PieceType promotion;
|
||||||
|
|
||||||
assert(move_is_ok(m));
|
assert(move_is_ok(m));
|
||||||
assert(move_promotion(m));
|
assert(move_promotion(m));
|
||||||
|
@ -1357,8 +1356,6 @@ void Position::undo_promotion_move(Move m, const UndoInfo &u) {
|
||||||
pieceCount[us][promotion]--;
|
pieceCount[us][promotion]--;
|
||||||
pieceCount[us][PAWN]++;
|
pieceCount[us][PAWN]++;
|
||||||
|
|
||||||
capture = u.capture;
|
|
||||||
|
|
||||||
if (capture)
|
if (capture)
|
||||||
{
|
{
|
||||||
assert(capture != KING);
|
assert(capture != KING);
|
||||||
|
@ -1686,6 +1683,7 @@ void Position::clear() {
|
||||||
epSquare = SQ_NONE;
|
epSquare = SQ_NONE;
|
||||||
rule50 = 0;
|
rule50 = 0;
|
||||||
gamePly = 0;
|
gamePly = 0;
|
||||||
|
previous = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1939,7 +1937,7 @@ bool Position::has_mate_threat(Color c) {
|
||||||
if (is_mate())
|
if (is_mate())
|
||||||
result = true;
|
result = true;
|
||||||
|
|
||||||
undo_move(mlist[i].move, u2);
|
undo_move(mlist[i].move);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Undo null move, if necessary
|
// Undo null move, if necessary
|
||||||
|
|
|
@ -87,6 +87,7 @@ struct UndoInfo {
|
||||||
Move lastMove;
|
Move lastMove;
|
||||||
Value mgValue, egValue;
|
Value mgValue, egValue;
|
||||||
PieceType capture;
|
PieceType capture;
|
||||||
|
UndoInfo* previous;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -241,7 +242,7 @@ public:
|
||||||
|
|
||||||
// Doing and undoing moves
|
// Doing and undoing moves
|
||||||
void do_move(Move m, UndoInfo &u);
|
void do_move(Move m, UndoInfo &u);
|
||||||
void undo_move(Move m, const UndoInfo &u);
|
void undo_move(Move m);
|
||||||
void do_null_move(UndoInfo &u);
|
void do_null_move(UndoInfo &u);
|
||||||
void undo_null_move(const UndoInfo &u);
|
void undo_null_move(const UndoInfo &u);
|
||||||
|
|
||||||
|
@ -296,10 +297,10 @@ private:
|
||||||
// Helper functions for doing and undoing moves
|
// Helper functions for doing and undoing moves
|
||||||
void do_capture_move(Move m, PieceType capture, Color them, Square to);
|
void do_capture_move(Move m, PieceType capture, Color them, Square to);
|
||||||
void do_castle_move(Move m);
|
void do_castle_move(Move m);
|
||||||
void do_promotion_move(Move m, UndoInfo &u);
|
void do_promotion_move(Move m);
|
||||||
void do_ep_move(Move m);
|
void do_ep_move(Move m);
|
||||||
void undo_castle_move(Move m);
|
void undo_castle_move(Move m);
|
||||||
void undo_promotion_move(Move m, const UndoInfo &u);
|
void undo_promotion_move(Move m);
|
||||||
void undo_ep_move(Move m);
|
void undo_ep_move(Move m);
|
||||||
void find_checkers();
|
void find_checkers();
|
||||||
|
|
||||||
|
@ -356,6 +357,7 @@ private:
|
||||||
Move lastMove;
|
Move lastMove;
|
||||||
Value mgValue, egValue;
|
Value mgValue, egValue;
|
||||||
PieceType capture;
|
PieceType capture;
|
||||||
|
UndoInfo* previous;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -835,7 +835,7 @@ namespace {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pos.undo_move(move, u);
|
pos.undo_move(move);
|
||||||
|
|
||||||
// Finished searching the move. If AbortSearch is true, the search
|
// Finished searching the move. If AbortSearch is true, the search
|
||||||
// was aborted because the user interrupted the search or because we
|
// was aborted because the user interrupted the search or because we
|
||||||
|
@ -1054,7 +1054,7 @@ namespace {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pos.undo_move(move, u);
|
pos.undo_move(move);
|
||||||
|
|
||||||
assert(value > -VALUE_INFINITE && value < VALUE_INFINITE);
|
assert(value > -VALUE_INFINITE && value < VALUE_INFINITE);
|
||||||
|
|
||||||
|
@ -1358,7 +1358,7 @@ namespace {
|
||||||
ss[ply].reduction = Depth(0);
|
ss[ply].reduction = Depth(0);
|
||||||
value = -search(pos, ss, -(beta-1), newDepth, ply+1, true, threadID);
|
value = -search(pos, ss, -(beta-1), newDepth, ply+1, true, threadID);
|
||||||
}
|
}
|
||||||
pos.undo_move(move, u);
|
pos.undo_move(move);
|
||||||
|
|
||||||
assert(value > -VALUE_INFINITE && value < VALUE_INFINITE);
|
assert(value > -VALUE_INFINITE && value < VALUE_INFINITE);
|
||||||
|
|
||||||
|
@ -1516,7 +1516,7 @@ namespace {
|
||||||
UndoInfo u;
|
UndoInfo u;
|
||||||
pos.do_move(move, u);
|
pos.do_move(move, u);
|
||||||
Value value = -qsearch(pos, ss, -beta, -alpha, depth-OnePly, ply+1, threadID);
|
Value value = -qsearch(pos, ss, -beta, -alpha, depth-OnePly, ply+1, threadID);
|
||||||
pos.undo_move(move, u);
|
pos.undo_move(move);
|
||||||
|
|
||||||
assert(value > -VALUE_INFINITE && value < VALUE_INFINITE);
|
assert(value > -VALUE_INFINITE && value < VALUE_INFINITE);
|
||||||
|
|
||||||
|
@ -1628,7 +1628,7 @@ namespace {
|
||||||
ss[sp->ply].reduction = Depth(0);
|
ss[sp->ply].reduction = Depth(0);
|
||||||
value = -search(pos, ss, -(sp->beta - 1), newDepth, sp->ply+1, true, threadID);
|
value = -search(pos, ss, -(sp->beta - 1), newDepth, sp->ply+1, true, threadID);
|
||||||
}
|
}
|
||||||
pos.undo_move(move, u);
|
pos.undo_move(move);
|
||||||
|
|
||||||
assert(value > -VALUE_INFINITE && value < VALUE_INFINITE);
|
assert(value > -VALUE_INFINITE && value < VALUE_INFINITE);
|
||||||
|
|
||||||
|
@ -1751,7 +1751,7 @@ namespace {
|
||||||
Threads[threadID].failHighPly1 = false;
|
Threads[threadID].failHighPly1 = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pos.undo_move(move, u);
|
pos.undo_move(move);
|
||||||
|
|
||||||
assert(value > -VALUE_INFINITE && value < VALUE_INFINITE);
|
assert(value > -VALUE_INFINITE && value < VALUE_INFINITE);
|
||||||
|
|
||||||
|
@ -1884,7 +1884,7 @@ namespace {
|
||||||
pos.do_move(moves[count].move, u);
|
pos.do_move(moves[count].move, u);
|
||||||
moves[count].score = -qsearch(pos, ss, -VALUE_INFINITE, VALUE_INFINITE,
|
moves[count].score = -qsearch(pos, ss, -VALUE_INFINITE, VALUE_INFINITE,
|
||||||
Depth(0), 1, 0);
|
Depth(0), 1, 0);
|
||||||
pos.undo_move(moves[count].move, u);
|
pos.undo_move(moves[count].move);
|
||||||
moves[count].pv[0] = moves[i].move;
|
moves[count].pv[0] = moves[i].move;
|
||||||
moves[count].pv[1] = MOVE_NONE; // FIXME
|
moves[count].pv[1] = MOVE_NONE; // FIXME
|
||||||
count++;
|
count++;
|
||||||
|
|
Loading…
Add table
Reference in a new issue