Don't update gamePly after each move
authorMarco Costalba <mcostalba@gmail.com>
Wed, 20 Jul 2011 08:45:40 +0000 (10:45 +0200)
committerMarco Costalba <mcostalba@gmail.com>
Sun, 24 Jul 2011 05:15:39 +0000 (06:15 +0100)
We just need startup value to calculate available
thinking time. So remove from state.

No functional change.

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

index bc9b5e0e2f6c1905d4739b2741b220aec1255d5f..922a96fd8bdee8e23c4df7e1382ca486985a961c 100644 (file)
@@ -190,11 +190,11 @@ void Position::from_fen(const string& fenStr, bool isChess960) {
   }
 
   // 5-6. Halfmove clock and fullmove number
-  fen >> std::skipws >> st->rule50 >> st->gamePly;
+  fen >> std::skipws >> st->rule50 >> startPosPly;
 
   // Convert from fullmove starting from 1 to ply starting from 0,
   // handle also common incorrect FEN with fullmove = 0.
-  st->gamePly = Max(2 * (st->gamePly - 1), 0) + int(sideToMove == BLACK);
+  startPosPly = Max(2 * (startPosPly - 1), 0) + int(sideToMove == BLACK);
 
   // Various initialisations
   chess960 = isChess960;
@@ -314,7 +314,7 @@ const string Position::to_fen() const {
       fen << '-';
 
   fen << (ep_square() == SQ_NONE ? " -" : " " + square_to_string(ep_square()))
-      << " " << st->rule50 << " " << 1 + (st->gamePly - int(sideToMove == BLACK)) / 2;
+      << " " << st->rule50 << " " << 1 + (startPosPly - int(sideToMove == BLACK)) / 2;
 
   return fen.str();
 }
@@ -786,10 +786,10 @@ void Position::do_move(Move m, StateInfo& newSt, const CheckInfo& ci, bool moveI
   // pointer to point to the new, ready to be updated, state.
   struct ReducedStateInfo {
     Key pawnKey, materialKey;
-    int castleRights, rule50, gamePly, pliesFromNull;
-    Square epSquare;
-    Score value;
     Value npMaterial[2];
+    int castleRights, rule50, pliesFromNull;
+    Score value;
+    Square epSquare;
   };
 
   memcpy(&newSt, st, sizeof(ReducedStateInfo));
@@ -803,7 +803,6 @@ void Position::do_move(Move m, StateInfo& newSt, const CheckInfo& ci, bool moveI
   // Increment the 50 moves rule draw counter. Resetting it to zero in the
   // case of non-reversible moves is taken care of later.
   st->rule50++;
-  st->gamePly++;
   st->pliesFromNull++;
 
   if (move_is_castle(m))
@@ -1339,7 +1338,6 @@ void Position::do_null_move(StateInfo& backupSt) {
   sideToMove = opposite_color(sideToMove);
   st->epSquare = SQ_NONE;
   st->rule50++;
-  st->gamePly++;
   st->pliesFromNull = 0;
   st->value += (sideToMove == WHITE) ?  TempoValue : -TempoValue;
 
@@ -1364,7 +1362,6 @@ void Position::undo_null_move() {
   // Update the necessary information
   sideToMove = opposite_color(sideToMove);
   st->rule50--;
-  st->gamePly--;
 
   assert(is_ok());
 }
index 14e6b95c3136fd7dc14be38b9359df3aa980ad33..a933c3faf6e41f843000730a34839a6fa0ad0627 100644 (file)
@@ -48,10 +48,10 @@ class Position;
 
 struct StateInfo {
   Key pawnKey, materialKey;
-  int castleRights, rule50, gamePly, pliesFromNull;
-  Square epSquare;
-  Score value;
   Value npMaterial[2];
+  int castleRights, rule50, pliesFromNull;
+  Score value;
+  Square epSquare;
 
   Key key;
   Bitboard checkersBB;
@@ -188,8 +188,8 @@ public:
   bool is_mate() const;
   template<bool SkipRepetition> bool is_draw() const;
 
-  // Number of plies from starting position
-  int game_ply() const;
+  // Plies from start position to the beginning of search
+  int startpos_ply_counter() const;
 
   // Other properties of the position
   bool opposite_colored_bishops() const;
@@ -255,6 +255,7 @@ private:
   Square castleRookSquare[16]; // [castleRight]
   StateInfo startState;
   int64_t nodes;
+  int startPosPly;
   Color sideToMove;
   int threadID;
   StateInfo* st;
@@ -421,8 +422,8 @@ inline bool Position::move_is_passed_pawn_push(Move m) const {
         && pawn_is_passed(c, move_to(m));
 }
 
-inline int Position::game_ply() const {
-  return st->gamePly;
+inline int Position::startpos_ply_counter() const {
+  return startPosPly;
 }
 
 inline bool Position::opposite_colored_bishops() const {
index 29f573851186dda19a072f32127bc3418ec125a1..aec6434553a8c82f48908fad4183ed20ea50121d 100644 (file)
@@ -393,7 +393,7 @@ bool think(Position& pos, const SearchLimits& limits, Move searchMoves[]) {
   NodesSincePoll = 0;
   current_search_time(get_system_time());
   Limits = limits;
-  TimeMgr.init(Limits, pos.game_ply());
+  TimeMgr.init(Limits, pos.startpos_ply_counter());
 
   // Set output steram in normal or chess960 mode
   cout << set960(pos.is_chess960());
index 64489f79593095130fe3421bc2bb719523dcd389..931891a0263cc6c32f7df193a8380a487e9aa905 100644 (file)
@@ -39,7 +39,7 @@ namespace {
 
   // Keep track of position keys along the setup moves (from start position to the
   // position just before to start searching). This is needed by draw detection.
-  std::vector<StateInfo> SetupState;
+  std::vector<StateInfo> SetupState(200, StateInfo());
 
   // UCIParser is a class for parsing UCI input. The class
   // is actually a string stream built on a given input string.