Coding style in move.cpp
authorMarco Costalba <mcostalba@gmail.com>
Sat, 23 Jun 2012 06:51:02 +0000 (07:51 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Sat, 23 Jun 2012 07:34:07 +0000 (08:34 +0100)
No functional change.

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

index 74271b31428346238877a968029a488f759f8797..41d1603771a7b4d7d29daa019c23667deff99272 100644 (file)
@@ -26,9 +26,9 @@
 using std::string;
 
 /// move_to_uci() converts a move to a string in coordinate notation
 using std::string;
 
 /// 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. Instead internally Move is coded as "king captures rook".
+/// (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. Internally castle moves are always coded as "king captures rook".
 
 const string move_to_uci(Move m, bool chess960) {
 
 
 const string move_to_uci(Move m, bool chess960) {
 
@@ -43,7 +43,7 @@ const string move_to_uci(Move m, bool chess960) {
       return "0000";
 
   if (is_castle(m) && !chess960)
       return "0000";
 
   if (is_castle(m) && !chess960)
-      to = from + (file_of(to) == FILE_H ? Square(2) : -Square(2));
+      to = make_square(to > from ? FILE_G : FILE_C, rank_of(from));
 
   if (is_promotion(m))
       promotion = char(tolower(piece_type_to_char(promotion_type(m))));
 
   if (is_promotion(m))
       promotion = char(tolower(piece_type_to_char(promotion_type(m))));
@@ -53,12 +53,11 @@ const string move_to_uci(Move m, bool chess960) {
 
 
 /// move_from_uci() takes a position and a string representing a move in
 
 
 /// move_from_uci() takes a position and a string representing a move in
-/// simple coordinate notation and returns an equivalent Move if any.
-/// Moves are guaranteed to be legal.
+/// simple coordinate notation and returns an equivalent legal Move if any.
 
 Move move_from_uci(const Position& pos, string& str) {
 
 
 Move move_from_uci(const Position& pos, string& str) {
 
-  if (str.length() == 5) // Junior could send promotion in uppercase
+  if (str.length() == 5) // Junior could send promotion piece in uppercase
       str[4] = char(tolower(str[4]));
 
   for (MoveList<MV_LEGAL> ml(pos); !ml.end(); ++ml)
       str[4] = char(tolower(str[4]));
 
   for (MoveList<MV_LEGAL> ml(pos); !ml.end(); ++ml)
@@ -69,9 +68,8 @@ Move move_from_uci(const Position& pos, string& str) {
 }
 
 
 }
 
 
-/// move_to_san() takes a position and a move as input, where it is assumed
-/// that the move is a legal move for the position. The return value is
-/// a string containing the move in short algebraic notation.
+/// move_to_san() takes a position and a legal Move as input and returns its
+/// short algebraic notation representation.
 
 const string move_to_san(Position& pos, Move m) {
 
 
 const string move_to_san(Position& pos, Move m) {
 
@@ -81,17 +79,17 @@ const string move_to_san(Position& pos, Move m) {
   if (m == MOVE_NULL)
       return "(null)";
 
   if (m == MOVE_NULL)
       return "(null)";
 
-  assert(is_ok(m));
+  assert(pos.move_is_legal(m));
 
   Bitboard attackers;
   bool ambiguousMove, ambiguousFile, ambiguousRank;
 
   Bitboard attackers;
   bool ambiguousMove, ambiguousFile, ambiguousRank;
-  Square sq, from = from_sq(m);
-  Square to = to_sq(m);
-  PieceType pt = type_of(pos.piece_moved(m));
   string san;
   string san;
+  Square from = from_sq(m);
+  Square to = to_sq(m);
+  PieceType pt = type_of(pos.piece_on(from));
 
   if (is_castle(m))
 
   if (is_castle(m))
-      san = (to_sq(m) < from_sq(m) ? "O-O-O" : "O-O");
+      san = to_sq(m) < from_sq(m) ? "O-O-O" : "O-O";
   else
   {
       if (pt != PAWN)
   else
   {
       if (pt != PAWN)
@@ -106,18 +104,14 @@ const string move_to_san(Position& pos, Move m) {
 
           while (attackers)
           {
 
           while (attackers)
           {
-              sq = pop_1st_bit(&attackers);
+              Square sq = pop_1st_bit(&attackers);
 
               // Pinned pieces are not included in the possible sub-set
               if (!pos.pl_move_is_legal(make_move(sq, to), pos.pinned_pieces()))
                   continue;
 
 
               // Pinned pieces are not included in the possible sub-set
               if (!pos.pl_move_is_legal(make_move(sq, to), pos.pinned_pieces()))
                   continue;
 
-              if (file_of(sq) == file_of(from))
-                  ambiguousFile = true;
-
-              if (rank_of(sq) == rank_of(from))
-                  ambiguousRank = true;
-
+              ambiguousFile |= file_of(sq) == file_of(from);
+              ambiguousRank |= rank_of(sq) == rank_of(from);
               ambiguousMove = true;
           }
 
               ambiguousMove = true;
           }
 
@@ -125,8 +119,10 @@ const string move_to_san(Position& pos, Move m) {
           {
               if (!ambiguousFile)
                   san += file_to_char(file_of(from));
           {
               if (!ambiguousFile)
                   san += file_to_char(file_of(from));
+
               else if (!ambiguousRank)
                   san += rank_to_char(rank_of(from));
               else if (!ambiguousRank)
                   san += rank_to_char(rank_of(from));
+
               else
                   san += square_to_string(from);
           }
               else
                   san += square_to_string(from);
           }
@@ -143,10 +139,7 @@ const string move_to_san(Position& pos, Move m) {
       san += square_to_string(to);
 
       if (is_promotion(m))
       san += square_to_string(to);
 
       if (is_promotion(m))
-      {
-          san += '=';
-          san += piece_type_to_char(promotion_type(m));
-      }
+          san += string("=") + piece_type_to_char(promotion_type(m));
   }
 
   if (pos.move_gives_check(m, CheckInfo(pos)))
   }
 
   if (pos.move_gives_check(m, CheckInfo(pos)))
index 55dc33feee917ea380f20110b4e5f27e0a527e3b..a149bddb1bf59033134f52ca355e67cfdf349340 100644 (file)
@@ -141,6 +141,7 @@ public:
   // Properties of moves
   bool move_gives_check(Move m, const CheckInfo& ci) const;
   bool move_attacks_square(Move m, Square s) const;
   // Properties of moves
   bool move_gives_check(Move m, const CheckInfo& ci) const;
   bool move_attacks_square(Move m, Square s) const;
+  bool move_is_legal(const Move m) const;
   bool pl_move_is_legal(Move m, Bitboard pinned) const;
   bool is_pseudo_legal(const Move m) const;
   bool is_capture(Move m) const;
   bool pl_move_is_legal(Move m, Bitboard pinned) const;
   bool is_pseudo_legal(const Move m) const;
   bool is_capture(Move m) const;
@@ -197,7 +198,6 @@ private:
   void clear();
   void put_piece(Piece p, Square s);
   void set_castle_right(Color c, Square rfrom);
   void clear();
   void put_piece(Piece p, Square s);
   void set_castle_right(Color c, Square rfrom);
-  bool move_is_legal(const Move m) const;
 
   // Helper template functions
   template<bool Do> void do_castle_move(Move m);
 
   // Helper template functions
   template<bool Do> void do_castle_move(Move m);