Simplify squares_delta()
authorMarco Costalba <mcostalba@gmail.com>
Sun, 2 Jan 2011 09:41:05 +0000 (10:41 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Sun, 2 Jan 2011 09:59:08 +0000 (10:59 +0100)
And rename in ray_direction()

Patch from UncombedCoconut.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
src/bitboard.cpp
src/movegen.cpp

index 9d9a16e8ba3614f51ff55eec3f14f813bd0d6e24..23ff18172834720e0538b309cf3b1fb08294a080 100644 (file)
@@ -248,7 +248,7 @@ namespace {
   void init_attacks();
   void init_between_bitboards();
   void init_pseudo_attacks();
-  SquareDelta squares_delta(Square orig, Square dest);
+  SquareDelta ray_direction(Square orig, Square dest);
   Bitboard index_to_bitboard(int index, Bitboard mask);
   Bitboard sliding_attacks(int sq, Bitboard block, int dirs, int deltas[][2],
                            int fmin, int fmax, int rmin, int rmax);
@@ -454,23 +454,14 @@ namespace {
     return result;
   }
 
-  SquareDelta squares_delta(Square orig, Square dest) {
+  SquareDelta ray_direction(Square orig, Square dest) {
 
-    const SquareDelta deltas[] = { DELTA_N, DELTA_NE, DELTA_E, DELTA_SE,
-                                   DELTA_S, DELTA_SW, DELTA_W, DELTA_NW };
+    int df = file_distance(orig, dest);
+    int dr = rank_distance(orig, dest);
 
-    for (int idx = 0; idx < 8; idx++)
-    {
-        Square s = orig + deltas[idx];
-
-        while (square_is_ok(s) && square_distance(s, s - deltas[idx]) == 1)
-        {
-            if (s == dest)
-                return deltas[idx];
+    if (orig != dest && (!df || !dr || df == dr))
+        return SquareDelta(dest - orig) / Max(df, dr);
 
-            s += deltas[idx];
-        }
-    }
     return DELTA_NONE;
   }
 
@@ -483,7 +474,7 @@ namespace {
         for (s2 = SQ_A1; s2 <= SQ_H8; s2++)
         {
             BetweenBB[s1][s2] = EmptyBoardBB;
-            d = squares_delta(s1, s2);
+            d = ray_direction(s1, s2);
 
             if (d != DELTA_NONE)
                 for (s3 = s1 + d; s3 != s2; s3 += d)
index 0abca95d3a81ec68374091b90fc2b16f29025e90..f688bfef67054c138a5d96c72ef3a1478150fb9f 100644 (file)
@@ -562,7 +562,7 @@ namespace {
 
         if (Type == CHECK)
         {
-            // Condider only pawn moves which give direct checks
+            // Consider only pawn moves which give direct checks
             b1 &= pos.attacks_from<PAWN>(ksq, Them);
             b2 &= pos.attacks_from<PAWN>(ksq, Them);