From b08ba446f655ba6292cb0b5a1012e790e4ad8d7d Mon Sep 17 00:00:00 2001 From: Joona Kiiski Date: Thu, 6 Jan 2011 13:34:16 +0200 Subject: [PATCH] Clean up position setup code No functional change. Signed-off-by: Marco Costalba --- src/position.cpp | 36 ++++++++++++++++++------------------ src/position.h | 12 ++---------- src/uci.cpp | 6 +----- 3 files changed, 21 insertions(+), 33 deletions(-) diff --git a/src/position.cpp b/src/position.cpp index 71556a56..ae28805c 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -205,6 +205,7 @@ void Position::from_fen(const string& fen, bool c960) { */ char token; + int hmc, fmn; std::istringstream ss(fen); Rank rank = RANK_8; File file = FILE_A; @@ -265,12 +266,10 @@ void Position::from_fen(const string& fen, bool c960) { } // 5. Halfmove clock - int hmc; if (ss >> hmc) st->rule50 = hmc; // 6. Fullmove number - int fmn; if (ss >> fmn) startPosPlyCounter = (fmn - 1) * 2 + int(sideToMove == BLACK); @@ -774,6 +773,23 @@ bool Position::move_is_check(Move m, const CheckInfo& ci) const { } +/// Position::do_setup_move() makes a permanent move on the board. +/// It should be used when setting up a position on board. +/// You can't undo the move. + +void Position::do_setup_move(Move m, StateInfo& newSt) { + + do_move(m, newSt); + + // Reset "game ply" in case we made a non-reversible move. + // "game ply" is used for repetition detection. + if (st->rule50 == 0) + st->gamePly = 0; + + // Update the number of plies played from the starting position + startPosPlyCounter++; +} + /// Position::do_move() makes a move, and saves all information necessary /// to a StateInfo object. The move is assumed to be legal. /// Pseudo-legal moves should be filtered out before this function is called. @@ -1541,22 +1557,6 @@ void Position::clear() { } -/// Position::reset_game_ply() simply sets gamePly to 0. It is used from the -/// UCI interface code, whenever a non-reversible move is made in a -/// 'position fen moves m1 m2 ...' command. This makes it possible -/// for the program to handle games of arbitrary length, as long as the GUI -/// handles draws by the 50 move rule correctly. - -void Position::reset_game_ply() { - - st->gamePly = 0; -} - -void Position::inc_startpos_ply_counter() { - - startPosPlyCounter++; -} - /// Position::put_piece() puts a piece on the given square of the board, /// updating the board array, pieces list, bitboards, and piece counts. diff --git a/src/position.h b/src/position.h index 91b341ad..761724ad 100644 --- a/src/position.h +++ b/src/position.h @@ -221,6 +221,7 @@ public: // Doing and undoing moves void detach(); + void do_setup_move(Move m, StateInfo& St); void do_move(Move m, StateInfo& st); void do_move(Move m, StateInfo& st, const CheckInfo& ci, bool moveIsCheck); void undo_move(Move m); @@ -250,9 +251,7 @@ public: // Check if side to move could be mated in one bool has_mate_threat(); - // Number of plies since the last non-reversible move - int rule_50_counter() const; - + // Number of plies from starting position int startpos_ply_counter() const; // Other properties of the position @@ -263,9 +262,6 @@ public: // Current thread ID searching on the position int thread() const; - // Reset the gamePly variable to 0 - void reset_game_ply(); - void inc_startpos_ply_counter(); int64_t nodes_searched() const; void set_nodes_searched(int64_t n); @@ -534,10 +530,6 @@ inline bool Position::move_is_passed_pawn_push(Move m) const { && pawn_is_passed(c, move_to(m)); } -inline int Position::rule_50_counter() const { - return st->rule50; -} - inline int Position::startpos_ply_counter() const { return startPosPlyCounter; } diff --git a/src/uci.cpp b/src/uci.cpp index a7a61cec..6593d5ad 100644 --- a/src/uci.cpp +++ b/src/uci.cpp @@ -171,11 +171,7 @@ namespace { while (up >> token) { move = move_from_uci(pos, token); - pos.do_move(move, st); - if (pos.rule_50_counter() == 0) - pos.reset_game_ply(); - - pos.inc_startpos_ply_counter(); //FIXME: make from_fen to support this and rule50 + pos.do_setup_move(move, st); } // Our StateInfo st is about going out of scope so copy // its content inside pos before it disappears. -- 2.39.2