Retire move_attacks_square()
authorMarco Costalba <mcostalba@gmail.com>
Tue, 30 Oct 2012 18:56:19 +0000 (19:56 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Tue, 30 Oct 2012 19:03:35 +0000 (20:03 +0100)
There is only one call site. This patch is a
preparation for the next one that will affect
functionality.

No functional change.

src/position.cpp
src/position.h
src/search.cpp

index be9e7ac847f68eac2e2bb339eaa84adb715f949a..50bb8e18f2c8e0e173f8e0e5deca5d66fb079082 100644 (file)
@@ -473,37 +473,6 @@ Bitboard Position::attacks_from(Piece p, Square s, Bitboard occ) {
 }
 
 
-/// Position::move_attacks_square() tests whether a move from the current
-/// position attacks a given square.
-
-bool Position::move_attacks_square(Move m, Square s) const {
-
-  assert(is_ok(m));
-  assert(is_ok(s));
-
-  Bitboard occ, xray;
-  Square from = from_sq(m);
-  Square to = to_sq(m);
-  Piece piece = piece_moved(m);
-
-  assert(!is_empty(from));
-
-  // Update occupancy as if the piece is moving
-  occ = pieces() ^ from ^ to;
-
-  // The piece moved in 'to' attacks the square 's' ?
-  if (attacks_from(piece, to, occ) & s)
-      return true;
-
-  // Scan for possible X-ray attackers behind the moved piece
-  xray =  (attacks_bb<  ROOK>(s, occ) & pieces(color_of(piece), QUEEN, ROOK))
-        | (attacks_bb<BISHOP>(s, occ) & pieces(color_of(piece), QUEEN, BISHOP));
-
-  // Verify attackers are triggered by our move and not already existing
-  return xray && (xray ^ (xray & attacks_from<QUEEN>(s)));
-}
-
-
 /// Position::pl_move_is_legal() tests whether a pseudo-legal move is legal
 
 bool Position::pl_move_is_legal(Move m, Bitboard pinned) const {
index ff75848ecacfab4fd4dc1f4f099abc358a6c26b0..d09dce08c22a6f9fe93772cbee22b733bb13daf7 100644 (file)
@@ -137,7 +137,6 @@ public:
 
   // 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;
index 96e40515e9e26a3192b02be102bc9aac20c7da89..2b51a698b0de3e40c8208255251a92fc0149faf0 100644 (file)
@@ -1411,12 +1411,10 @@ split_point_start: // At split points actual search starts from here
     assert(!pos.is_capture_or_promotion(m));
     assert(!pos.is_passed_pawn_push(m));
 
-    Square mfrom, mto, tfrom, tto;
-
-    mfrom = from_sq(m);
-    mto = to_sq(m);
-    tfrom = from_sq(threat);
-    tto = to_sq(threat);
+    Square mfrom = from_sq(m);
+    Square mto = to_sq(m);
+    Square tfrom = from_sq(threat);
+    Square tto = to_sq(threat);
 
     // Case 1: Don't prune moves which move the threatened piece
     if (mfrom == tto)
@@ -1424,11 +1422,26 @@ split_point_start: // At split points actual search starts from here
 
     // Case 2: If the threatened piece has value less than or equal to the
     // value of the threatening piece, don't prune moves which defend it.
-    if (   pos.is_capture(threat)
+    if (    pos.is_capture(threat)
         && (   PieceValue[MG][pos.piece_on(tfrom)] >= PieceValue[MG][pos.piece_on(tto)]
-            || type_of(pos.piece_on(tfrom)) == KING)
-        && pos.move_attacks_square(m, tto))
-        return true;
+            || type_of(pos.piece_on(tfrom)) == KING))
+    {
+        // Update occupancy as if the piece is moving
+        Bitboard occ = pos.pieces() ^ mfrom ^ mto;
+        Piece piece = pos.piece_on(mfrom);
+
+        // The moved piece attacks the square 'tto' ?
+        if (pos.attacks_from(piece, mto, occ) & tto)
+            return true;
+
+        // Scan for possible X-ray attackers behind the moved piece
+        Bitboard xray =  (attacks_bb<  ROOK>(tto, occ) & pos.pieces(color_of(piece), QUEEN, ROOK))
+                       | (attacks_bb<BISHOP>(tto, occ) & pos.pieces(color_of(piece), QUEEN, BISHOP));
+
+        // Verify attackers are triggered by our move and not already existing
+        if (xray && (xray ^ (xray & pos.attacks_from<QUEEN>(tto))))
+            return true;
+    }
 
     // Case 3: If the moving piece in the threatened move is a slider, don't
     // prune safe moves which block its ray.