1
0
Fork 0

Don't copy a full Position object in print()

Function move_to_san() requires the Position to be
passed by referenced because a do/undo move is done
inside the function to detect a possible mate and to
add to the san string the corresponding '#' suffix.

Instead of passing a copy of current position pass
directly the original position object after const
casting it. This has the advantage to avoid a costly
Position copy, on the down side a bench test could
report different searched nodes if print(move) is
used, due to the additionals do_move() calls.

No functional change.
sf_3_base
Marco Costalba 2012-10-22 00:53:17 +02:00
parent dbbbd3880c
commit 5fc8b27db9
1 changed files with 2 additions and 4 deletions

View File

@ -400,10 +400,8 @@ void Position::print(Move move) const {
sync_cout;
if (move)
{
Position p(*this);
cout << "\nMove is: " << (sideToMove == BLACK ? ".." : "") << move_to_san(p, move);
}
cout << "\nMove is: " << (sideToMove == BLACK ? ".." : "")
<< move_to_san(*const_cast<Position*>(this), move);
for (Square sq = SQ_A1; sq <= SQ_H8; sq++)
if (piece_on(sq) != NO_PIECE)