mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-19 16:46:30 +08:00
Don't copy Position in pretty_pv()
Also let do_setup_move() don't reuse same StateInfo so that we can remove the check about different StateInfo objects before memcpy() in do_move. Functional change due to harmless additionals do_move() / undo_move() steps. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
@@ -776,7 +776,9 @@ bool Position::move_is_check(Move m, const CheckInfo& ci) const {
|
||||
/// It should be used when setting up a position on board.
|
||||
/// You can't undo the move.
|
||||
|
||||
void Position::do_setup_move(Move m, StateInfo& newSt) {
|
||||
void Position::do_setup_move(Move m) {
|
||||
|
||||
StateInfo newSt;
|
||||
|
||||
do_move(m, newSt);
|
||||
|
||||
@@ -787,6 +789,10 @@ void Position::do_setup_move(Move m, StateInfo& newSt) {
|
||||
|
||||
// Update the number of plies played from the starting position
|
||||
startPosPlyCounter++;
|
||||
|
||||
// Our StateInfo newSt is about going out of scope so copy
|
||||
// its content inside pos before it disappears.
|
||||
detach();
|
||||
}
|
||||
|
||||
/// Position::do_move() makes a move, and saves all information necessary
|
||||
@@ -803,6 +809,7 @@ void Position::do_move(Move m, StateInfo& newSt, const CheckInfo& ci, bool moveI
|
||||
|
||||
assert(is_ok());
|
||||
assert(move_is_ok(m));
|
||||
assert(&newSt != st);
|
||||
|
||||
nodes++;
|
||||
Key key = st->key;
|
||||
@@ -818,8 +825,7 @@ void Position::do_move(Move m, StateInfo& newSt, const CheckInfo& ci, bool moveI
|
||||
Value npMaterial[2];
|
||||
};
|
||||
|
||||
if (&newSt != st)
|
||||
memcpy(&newSt, st, sizeof(ReducedStateInfo));
|
||||
memcpy(&newSt, st, sizeof(ReducedStateInfo));
|
||||
|
||||
newSt.previous = st;
|
||||
st = &newSt;
|
||||
|
||||
Reference in New Issue
Block a user