Retire square_from_string()
authorMarco Costalba <mcostalba@gmail.com>
Thu, 9 Dec 2010 11:10:02 +0000 (12:10 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Mon, 13 Dec 2010 19:29:38 +0000 (20:29 +0100)
And rename move_from/to_string() in a more specific
move_from/to_uci() that is a simple coordinate notation.

No functional change.

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

index 5ef64fe4b5c0f8c14864887f976b386294dc4a0d..5ea874e07575bd03ed2087d26766478e0f47e8c0 100644 (file)
 //// Functions
 ////
 
-/// move_from_string() takes a position and a string as input, and attempts to
+/// move_from_uci() takes a position and a string as input, and attempts to
 /// convert the string to a move, using simple coordinate notation (g1f3,
 /// a7a8q, etc.). In order to correctly parse en passant captures and castling
 /// moves, we need the position. This function is not robust, and expects that
 /// the input move is legal and correctly formatted.
 
-Move move_from_string(const Position& pos, const std::string& str) {
+Move move_from_uci(const Position& pos, const std::string& str) {
 
   Square from, to;
   Piece piece;
@@ -50,15 +50,15 @@ Move move_from_string(const Position& pos, const std::string& str) {
       return MOVE_NONE;
 
   // Read the from and to squares
-  from = square_from_string(str.substr(0, 2));
-  to = square_from_string(str.substr(2, 4));
+  from = make_square(file_from_char(str[0]), rank_from_char(str[1]));
+  to   = make_square(file_from_char(str[2]), rank_from_char(str[3]));
 
   // Find the moving piece
   piece = pos.piece_on(from);
 
   // If the string has more than 4 characters, try to interpret the 5th
-  // character as a promotion
-  if (type_of_piece(piece) == PAWN && str.length() > 4)
+  // character as a promotion.
+  if (str.length() > 4 && piece == piece_of_color_and_type(us, PAWN))
   {
       switch (tolower(str[4])) {
       case 'n':
@@ -69,47 +69,47 @@ Move move_from_string(const Position& pos, const std::string& str) {
           return make_promotion_move(from, to, ROOK);
       case 'q':
           return make_promotion_move(from, to, QUEEN);
-    }
+      }
   }
 
+  // En passant move? We assume that a pawn move is an en passant move
+  // if the destination square is epSquare.
+  if (to == pos.ep_square() && piece == piece_of_color_and_type(us, PAWN))
+      make_ep_move(from, to);
+
+  // Is this a castling move? A king move is assumed to be a castling move
+  // if the destination square is occupied by a friendly rook, or if the
+  // distance between the source and destination squares is more than 1.
   if (piece == piece_of_color_and_type(us, KING))
   {
-      // Is this a castling move? A king move is assumed to be a castling
-      // move if the destination square is occupied by a friendly rook, or
-      // if the distance between the source and destination squares is more
-      // than 1.
       if (pos.piece_on(to) == piece_of_color_and_type(us, ROOK))
           return make_castle_move(from, to);
 
-      else if (square_distance(from, to) > 1)
+      if (square_distance(from, to) > 1)
       {
           // This is a castling move, but we have to translate it to the
           // internal "king captures rook" representation.
           SquareDelta delta = (to > from ? DELTA_E : DELTA_W);
-          Square s = from + delta;
-          while (relative_rank(us, s) == RANK_1 && pos.piece_on(s) != piece_of_color_and_type(us, ROOK))
-              s += delta;
+          Square s = from;
+
+          do s += delta;
+          while (   pos.piece_on(s) != piece_of_color_and_type(us, ROOK)
+                 && relative_rank(us, s) == RANK_1);
 
-          return (relative_rank(us, s) == RANK_1 ? make_castle_move(from, s) : MOVE_NONE);
+          return relative_rank(us, s) == RANK_1 ? make_castle_move(from, s) : MOVE_NONE;
       }
   }
-  else if (piece == piece_of_color_and_type(us, PAWN))
-  {
-      // En passant move? We assume that a pawn move is an en passant move
-      // without further testing if the destination square is epSquare.
-      if (to == pos.ep_square())
-          return make_ep_move(from, to);
-  }
+
   return make_move(from, to);
 }
 
 
-/// move_to_string() converts a move to a string in coordinate notation
+/// move_to_uci() converts a move to a string in coordinate notation
 /// (g1f3, a7a8q, etc.). The only special case is castling moves, where we
 /// print in the e1g1 notation in normal chess mode, and in e1h1 notation in
 /// Chess960 mode.
 
-const std::string move_to_string(Move move, bool chess960) {
+const std::string move_to_uci(Move move, bool chess960) {
 
   std::string str;
   Square from = move_from(move);
@@ -140,7 +140,7 @@ const std::string move_to_string(Move move, bool chess960) {
 std::ostream& operator << (std::ostream& os, Move m) {
 
   bool chess960 = (os.iword(0) != 0); // See set960()
-  return os << move_to_string(m, chess960);
+  return os << move_to_uci(m, chess960);
 }
 
 
index e2562a422ce7c92954293d40479953f5f7ecd37b..06c9969ffb7e07929f3dcb5d5dd34445bd5880fe 100644 (file)
@@ -204,8 +204,8 @@ inline Move make_ep_move(Square from, Square to) {
 ////
 
 extern std::ostream& operator<<(std::ostream& os, Move m);
-extern Move move_from_string(const Position& pos, const std::string &str);
-extern const std::string move_to_string(Move m, bool chess960);
+extern Move move_from_uci(const Position& pos, const std::string &str);
+extern const std::string move_to_uci(Move m, bool chess960);
 extern bool move_is_ok(Move m);
 
 
index 59fb83924d1f79dfc7fbffb8a95401ef77bae915..604a4b3ae14e77bfccac4c1a637fcfbf1415014a 100644 (file)
@@ -92,12 +92,12 @@ inline SquareDelta pawn_push(Color c) {
     return (c == WHITE ? DELTA_N : DELTA_S);
 }
 
-inline bool piece_type_is_ok(PieceType pc) {
-  return pc >= PAWN && pc <= KING;
+inline bool piece_type_is_ok(PieceType pt) {
+  return pt >= PAWN && pt <= KING;
 }
 
-inline bool piece_is_ok(Piece pc) {
-  return piece_type_is_ok(type_of_piece(pc)) && color_is_ok(color_of_piece(pc));
+inline bool piece_is_ok(Piece p) {
+  return piece_type_is_ok(type_of_piece(p)) && color_is_ok(color_of_piece(p));
 }
 
 inline char piece_type_to_char(PieceType pt) {
index 4d427e8e1072d5400bf5c89e3aaea15cde0802ef..a4dde9cb6dc35300a366d5a9d9493c2d33a4c3d3 100644 (file)
@@ -160,10 +160,6 @@ inline char rank_to_char(Rank r) {
   return char(r - RANK_1 + int('1'));
 }
 
-inline Square square_from_string(const std::string& str) {
-  return make_square(file_from_char(str[0]), rank_from_char(str[1]));
-}
-
 inline const std::string square_to_string(Square s) {
   return  std::string(1, file_to_char(square_file(s)))
         + std::string(1, rank_to_char(square_rank(s)));
index a4a73fbf3eea557e05d1e4da9c86288a325c29fc..5a42cd9758bce299d6aa1bcef9a349ed48f1ab4e 100644 (file)
@@ -194,7 +194,7 @@ namespace {
             StateInfo st;
             while (uip >> token)
             {
-                move = move_from_string(pos, token);
+                move = move_from_uci(pos, token);
                 pos.do_move(move, st);
                 if (pos.rule_50_counter() == 0)
                     pos.reset_game_ply();
@@ -293,7 +293,7 @@ namespace {
         {
             int numOfMoves = 0;
             while (uip >> token)
-                searchMoves[numOfMoves++] = move_from_string(pos, token);
+                searchMoves[numOfMoves++] = move_from_uci(pos, token);
 
             searchMoves[numOfMoves] = MOVE_NONE;
         }