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:
Marco Costalba
2011-01-09 11:22:59 +01:00
parent c89762288b
commit 15153a1de7
6 changed files with 30 additions and 36 deletions

View File

@@ -30,6 +30,7 @@
#include "move.h"
#include "movegen.h"
#include "search.h"
using std::string;
@@ -178,7 +179,7 @@ const string move_to_san(Position& pos, Move m) {
/// It is used to write search information to the log file (which is created
/// when the UCI parameter "Use Search Log" is "true").
const string pretty_pv(const Position& pos, int time, int depth,
const string pretty_pv(Position& pos, int time, int depth,
Value score, ValueType type, Move pv[]) {
const int64_t K = 1000;
@@ -187,13 +188,12 @@ const string pretty_pv(const Position& pos, int time, int depth,
const size_t maxLength = 80 - startColumn;
const string lf = string("\n") + string(startColumn, ' ');
StateInfo st;
StateInfo state[PLY_MAX_PLUS_2], *st = state;
Move* m = pv;
std::stringstream s;
string san;
size_t length = 0;
Position p(pos, pos.thread());
// First print depth, score, time and searched nodes...
s << std::setw(2) << depth
<< (type == VALUE_TYPE_LOWER ? " >" : type == VALUE_TYPE_UPPER ? " <" : " ")
@@ -208,9 +208,9 @@ const string pretty_pv(const Position& pos, int time, int depth,
s << std::setw(7) << pos.nodes_searched() / M << " M ";
// ...then print the full PV line in short algebraic notation
for (Move* m = pv; *m != MOVE_NONE; m++)
while (*m != MOVE_NONE)
{
san = move_to_san(p, *m);
san = move_to_san(pos, *m);
length += san.length() + 1;
if (length > maxLength)
@@ -220,9 +220,12 @@ const string pretty_pv(const Position& pos, int time, int depth,
}
s << san << ' ';
p.do_move(*m, st);
pos.do_move(*m++, *st++);
}
// Restore original position before to leave
while (m != pv) pos.undo_move(*--m);
return s.str();
}