X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fposition.cpp;h=7b345fd9c9c731515a46490fe1768d3687f134b6;hp=b89c645f9768b77e5974e7a40aef0517f871d0ad;hb=223ebe7b4019c4b85b0f7f43b4dae534932d2287;hpb=6e4b4c42ed796652d122e2116561e9ad3848c641 diff --git a/src/position.cpp b/src/position.cpp index b89c645f..7b345fd9 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -274,7 +274,7 @@ void Position::set(const string& fenStr, bool isChess960, Thread* th) { for (rsq = relative_square(c, SQ_A1); type_of(piece_on(rsq)) != ROOK; ++rsq) {} else if (token >= 'A' && token <= 'H') - rsq = File(token - 'A') | relative_rank(c, RANK_1); + rsq = make_square(File(token - 'A'), relative_rank(c, RANK_1)); else continue; @@ -286,7 +286,7 @@ void Position::set(const string& fenStr, bool isChess960, Thread* th) { if ( ((ss >> col) && (col >= 'a' && col <= 'h')) && ((ss >> row) && (row == '3' || row == '6'))) { - st->epSquare = File(col - 'a') | Rank(row - '1'); + st->epSquare = make_square(File(col - 'a'), Rank(row - '1')); if (!(attackers_to(st->epSquare) & pieces(sideToMove, PAWN))) st->epSquare = SQ_NONE; @@ -388,21 +388,21 @@ const string Position::fen() const { int emptyCnt; std::ostringstream ss; - for (Rank rank = RANK_8; rank >= RANK_1; --rank) + for (Rank r = RANK_8; r >= RANK_1; --r) { - for (File file = FILE_A; file <= FILE_H; ++file) + for (File f = FILE_A; f <= FILE_H; ++f) { - for (emptyCnt = 0; file <= FILE_H && empty(file | rank); ++file) + for (emptyCnt = 0; f <= FILE_H && empty(make_square(f, r)); ++f) ++emptyCnt; if (emptyCnt) ss << emptyCnt; - if (file <= FILE_H) - ss << PieceToChar[piece_on(file | rank)]; + if (f <= FILE_H) + ss << PieceToChar[piece_on(make_square(f, r))]; } - if (rank > RANK_1) + if (r > RANK_1) ss << '/'; } @@ -433,27 +433,25 @@ const string Position::fen() const { /// Position::pretty() returns an ASCII representation of the position to be /// printed to the standard output together with the move's san notation. -const string Position::pretty(Move move) const { +const string Position::pretty(Move m) const { - const string dottedLine = "\n+---+---+---+---+---+---+---+---+"; - const string twoRows = dottedLine + "\n| | . | | . | | . | | . |" - + dottedLine + "\n| . | | . | | . | | . | |"; + std::ostringstream ss; - string brd = twoRows + twoRows + twoRows + twoRows + dottedLine; + if (m) + ss << "\nMove: " << (sideToMove == BLACK ? ".." : "") + << move_to_san(*const_cast(this), m); - for (Bitboard b = pieces(); b; ) - { - Square s = pop_lsb(&b); - brd[513 - 68 * rank_of(s) + 4 * file_of(s)] = PieceToChar[piece_on(s)]; - } + ss << "\n +---+---+---+---+---+---+---+---+\n"; - std::ostringstream ss; + for (Rank r = RANK_8; r >= RANK_1; --r) + { + for (File f = FILE_A; f <= FILE_H; ++f) + ss << " | " << PieceToChar[piece_on(make_square(f, r))]; - if (move) - ss << "\nMove: " << (sideToMove == BLACK ? ".." : "") - << move_to_san(*const_cast(this), move); + ss << " |\n +---+---+---+---+---+---+---+---+\n"; + } - ss << brd << "\nFen: " << fen() << "\nKey: " << std::hex << std::uppercase + ss << "\nFen: " << fen() << "\nKey: " << std::hex << std::uppercase << std::setfill('0') << std::setw(16) << st->key << "\nCheckers: "; for (Bitboard b = checkers(); b; ) @@ -664,7 +662,7 @@ bool Position::gives_check(Move m, const CheckInfo& ci) const { // the captured pawn. case ENPASSANT: { - Square capsq = file_of(to) | rank_of(from); + Square capsq = make_square(file_of(to), rank_of(from)); Bitboard b = (pieces() ^ from ^ capsq) | to; return (attacks_bb< ROOK>(ci.ksq, b) & pieces(sideToMove, QUEEN, ROOK)) @@ -1147,9 +1145,9 @@ void Position::flip() { string f, token; std::stringstream ss(fen()); - for (Rank rank = RANK_8; rank >= RANK_1; --rank) // Piece placement + for (Rank r = RANK_8; r >= RANK_1; --r) // Piece placement { - std::getline(ss, token, rank > RANK_1 ? '/' : ' '); + std::getline(ss, token, r > RANK_1 ? '/' : ' '); f.insert(0, token + (f.empty() ? " " : "/")); }