Clean up position setup code
authorJoona Kiiski <joona.kiiski@gmail.com>
Thu, 6 Jan 2011 11:34:16 +0000 (13:34 +0200)
committerMarco Costalba <mcostalba@gmail.com>
Thu, 6 Jan 2011 12:54:03 +0000 (13:54 +0100)
No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
src/position.cpp
src/position.h
src/uci.cpp

index 71556a566e49072d37023c5a07b74613e043303f..ae28805c4c6bfd4cf093d52c74bcf456ab23d22a 100644 (file)
@@ -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 <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.
 
index 91b341ad0ec428469415b424be6b67cce0d181d7..761724ad01d5aa9a1d47d47f37cb4bda5d820a8c 100644 (file)
@@ -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;
 }
index a7a61cecb4c61be92cb2a0600f0ecef4d2417b95..6593d5ad25a6fe71f14b9b2c57f0c6071285f42e 100644 (file)
@@ -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.