#include "move.h"
#include "movegen.h"
+#include "search.h"
using std::string;
/// 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,
- Value score, ValueType type, Move pv[]) {
+const string pretty_pv(Position& pos, int depth, Value score, int time, Move pv[]) {
const int64_t K = 1000;
const int64_t M = 1000000;
- const int startColumn = 29;
+ const int startColumn = 28;
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 ? " <" : " ")
- << std::setw(7) << score_string(score)
+ << std::setw(8) << score_string(score)
<< std::setw(8) << time_string(time);
if (pos.nodes_searched() < M)
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)
}
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();
}