X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fposition.cpp;h=ff0c4162a8f4e77303be946d4b68e171b304f6dc;hp=fc9ac124da2cd9a0109b68337f490b49b7dd9654;hb=f3e0b32def471a698e855061aa8e728657248a0f;hpb=b85bcc039cddd1c03967096bdd4dbfff709f2935 diff --git a/src/position.cpp b/src/position.cpp index fc9ac124..ff0c4162 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -17,12 +17,6 @@ along with this program. If not, see . */ - -//// -//// Includes -//// - -#include #include #include #include @@ -32,7 +26,6 @@ #include "bitcount.h" #include "movegen.h" -#include "movepick.h" #include "position.h" #include "psqtab.h" #include "rkiss.h" @@ -43,11 +36,6 @@ using std::string; using std::cout; using std::endl; - -//// -//// Position's static data definitions -//// - Key Position::zobrist[2][8][64]; Key Position::zobEp[64]; Key Position::zobCastle[16]; @@ -88,8 +76,6 @@ namespace { // Bonus for having the side to move (modified by Joona Kiiski) const Score TempoValue = make_score(48, 22); - bool isZero(char c) { return c == '0'; } - struct PieceLetters : public std::map { PieceLetters() { @@ -352,7 +338,7 @@ const string Position::to_fen() const { Square sq; char emptyCnt = '0'; - for (Rank rank = RANK_8; rank >= RANK_1; rank--) + for (Rank rank = RANK_8; rank >= RANK_1; rank--, fen += '/') { for (File file = FILE_A; file <= FILE_H; file++) { @@ -360,19 +346,23 @@ const string Position::to_fen() const { if (square_is_occupied(sq)) { - fen += emptyCnt; + if (emptyCnt != '0') + { + fen += emptyCnt; + emptyCnt = '0'; + } fen += pieceLetters.from_piece(piece_on(sq)); - emptyCnt = '0'; } else emptyCnt++; } - fen += emptyCnt; - fen += '/'; - emptyCnt = '0'; + + if (emptyCnt != '0') + { + fen += emptyCnt; + emptyCnt = '0'; + } } - fen.erase(std::remove_if(fen.begin(), fen.end(), isZero), fen.end()); - fen.erase(--fen.end()); fen += (sideToMove == WHITE ? " w " : " b "); if (st->castleRights != CASTLES_NONE) @@ -402,14 +392,6 @@ const string Position::to_fen() const { void Position::print(Move move) const { const char* dottedLine = "\n+---+---+---+---+---+---+---+---+\n"; - static bool requestPending = false; - - // Check for reentrancy, as example when called from inside - // MovePicker that is used also here in move_to_san() - if (requestPending) - return; - - requestPending = true; if (move) { @@ -424,17 +406,16 @@ void Position::print(Move move) const { for (File file = FILE_A; file <= FILE_H; file++) { Square sq = make_square(file, rank); - char c = (color_of_piece_on(sq) == BLACK ? '=' : ' '); Piece piece = piece_on(sq); if (piece == PIECE_NONE && square_color(sq) == DARK) piece = PIECE_NONE_DARK_SQ; + char c = (color_of_piece_on(sq) == BLACK ? '=' : ' '); cout << c << pieceLetters.from_piece(piece) << c << '|'; } } cout << dottedLine << "Fen is: " << to_fen() << "\nKey is: " << st->key << endl; - requestPending = false; }