Small improvment to Position::fen()
authorMarco Costalba <mcostalba@gmail.com>
Tue, 3 Dec 2013 09:09:17 +0000 (10:09 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Tue, 3 Dec 2013 09:53:21 +0000 (10:53 +0100)
No functional change.

src/position.cpp
src/position.h

index c4c6389dcf5bb2e9ef2974ab7c6070fe002e83b4..d2aeb8221209ad391e54480e6442444d91d19749 100644 (file)
@@ -211,7 +211,7 @@ void Position::set(const string& fenStr, bool isChess960, Thread* th) {
 */
 
   char col, row, token;
-  size_t p;
+  size_t idx;
   Square sq = SQ_A8;
   std::istringstream ss(fenStr);
 
@@ -227,9 +227,9 @@ void Position::set(const string& fenStr, bool isChess960, Thread* th) {
       else if (token == '/')
           sq -= Square(16);
 
-      else if ((p = PieceToChar.find(token)) != string::npos)
+      else if ((idx = PieceToChar.find(token)) != string::npos)
       {
-          put_piece(sq, color_of(Piece(p)), type_of(Piece(p)));
+          put_piece(sq, color_of(Piece(idx)), type_of(Piece(idx)));
           ++sq;
       }
   }
@@ -329,25 +329,21 @@ void Position::set_castling_flag(Color c, Square rfrom) {
 
 const string Position::fen() const {
 
+  int emptyCnt;
   std::ostringstream ss;
 
   for (Rank rank = RANK_8; rank >= RANK_1; --rank)
   {
       for (File file = FILE_A; file <= FILE_H; ++file)
       {
-          Square sq = file | rank;
-
-          if (empty(sq))
-          {
-              int emptyCnt = 1;
-
-              for ( ; file < FILE_H && empty(++sq); ++file)
-                  ++emptyCnt;
+          for (emptyCnt = 0; file <= FILE_H && empty(file | rank); ++file)
+              ++emptyCnt;
 
+          if (emptyCnt)
               ss << emptyCnt;
-          }
-          else
-              ss << PieceToChar[piece_on(sq)];
+
+          if (file <= FILE_H)
+              ss << PieceToChar[piece_on(file | rank)];
       }
 
       if (rank > RANK_1)
@@ -368,11 +364,11 @@ const string Position::fen() const {
   if (can_castle(BLACK_OOO))
       ss << (chess960 ? file_to_char(file_of(castling_rook_square(BLACK, QUEEN_SIDE)),  true) : 'q');
 
-  if (st->castlingFlags == NO_CASTLING)
+  if (!can_castle(WHITE) && !can_castle(BLACK))
       ss << '-';
 
   ss << (ep_square() == SQ_NONE ? " - " : " " + square_to_string(ep_square()) + " ")
-      << st->rule50 << " " << 1 + (gamePly - int(sideToMove == BLACK)) / 2;
+     << st->rule50 << " " << 1 + (gamePly - int(sideToMove == BLACK)) / 2;
 
   return ss.str();
 }
index 903b1b646e1a475dbdaebe7fdf86ac7a799bcd84..64cb349abf4dfd71d40a327b88f0ece334c0ac9a 100644 (file)
@@ -81,7 +81,7 @@ public:
   static void init();
 
   // Text input/output
-  void set(const std::string& fen, bool isChess960, Thread* th);
+  void set(const std::string& fenStr, bool isChess960, Thread* th);
   const std::string fen() const;
   const std::string pretty(Move m = MOVE_NONE) const;