#include <cassert>
#include <iomanip>
#include <sstream>
-#include <string>
+#include <stack>
#include "movegen.h"
#include "notation.h"
using namespace std;
-static const char* PieceToChar = " PNBRQK pnbrqk";
+static const char* PieceToChar[COLOR_NB] = { " PNBRQK", " pnbrqk" };
/// score_to_uci() converts a value to a string suitable for use with the UCI
string move = square_to_string(from) + square_to_string(to);
if (type_of(m) == PROMOTION)
- move += PieceToChar[make_piece(BLACK, promotion_type(m))]; // Lower case
+ move += PieceToChar[BLACK][promotion_type(m)]; // Lower case
return move;
}
{
if (pt != PAWN)
{
- san = PieceToChar[pt]; // Upper case
+ san = PieceToChar[WHITE][pt]; // Upper case
// Disambiguation if we have more then one piece with destination 'to'
// note that for pawns is not needed because starting file is explicit.
san += square_to_string(to);
if (type_of(m) == PROMOTION)
- san += string("=") + PieceToChar[promotion_type(m)];
+ san += string("=") + PieceToChar[WHITE][promotion_type(m)];
}
if (pos.move_gives_check(m, CheckInfo(pos)))
const int64_t K = 1000;
const int64_t M = 1000000;
- StateInfo state[MAX_PLY_PLUS_2], *st = state;
+ std::stack<StateInfo> st;
Move* m = pv;
string san, padding;
size_t length;
s << san << ' ';
length += san.length() + 1;
- pos.do_move(*m++, *st++);
+ st.push(StateInfo());
+ pos.do_move(*m++, st.top());
}
while (m != pv)