]> git.sesse.net Git - stockfish/blobdiff - src/direction.cpp
Retire SignedDirectionTable[] and RayBB[]
[stockfish] / src / direction.cpp
index 0210381d86e6d0765694b28ce3b9326087f1e091..77a985b1bae683fd696c817d089603390019ff62 100644 (file)
 
 #include "square.h"
 
+uint8_t DirectionTable[64][64];
 
-////
-//// Local definitions
-////
 
-namespace {
+static bool reachable(Square orig, Square dest, Direction d) {
 
   const SquareDelta directionToDelta[] = {
-      DELTA_E, DELTA_W, DELTA_N, DELTA_S, DELTA_NE, DELTA_SW, DELTA_NW, DELTA_SE
+      DELTA_E, DELTA_N, DELTA_NE, DELTA_NW, DELTA_W, DELTA_S, DELTA_SW, DELTA_SE
   };
 
-  bool reachable(Square orig, Square dest, SignedDirection dir) {
-
-    SquareDelta delta = directionToDelta[dir];
-    Square from = orig;
-    Square to = from + delta;
-    while (to != dest && square_distance(to, from) == 1 && square_is_ok(to))
-    {
-        from = to;
-        to += delta;
-    }
-    return (to == dest && square_distance(from, to) == 1);
-  }
+  SquareDelta delta = directionToDelta[dest > orig ? d : d + 4];
+  Square from = orig;
+  Square to = from + delta;
 
+  while (to != dest && square_distance(to, from) == 1 && square_is_ok(to))
+  {
+      from = to;
+      to += delta;
+  }
+  return to == dest && square_distance(from, to) == 1;
 }
 
-
-////
-//// Variables
-////
-
-uint8_t DirectionTable[64][64];
-uint8_t SignedDirectionTable[64][64];
-
-
-////
-//// Functions
-////
-
 void init_direction_table() {
 
   for (Square s1 = SQ_A1; s1 <= SQ_H8; s1++)
       for (Square s2 = SQ_A1; s2 <= SQ_H8; s2++)
       {
           DirectionTable[s1][s2] = uint8_t(DIR_NONE);
-          SignedDirectionTable[s1][s2] = uint8_t(SIGNED_DIR_NONE);
+
           if (s1 == s2)
               continue;
 
-          for (SignedDirection d = SIGNED_DIR_E; d != SIGNED_DIR_NONE; d++)
+          for (Direction d = DIR_E; d != DIR_NONE; d++)
           {
               if (reachable(s1, s2, d))
               {
-                  SignedDirectionTable[s1][s2] = uint8_t(d);
-                  DirectionTable[s1][s2] = uint8_t(d / 2);
+                  DirectionTable[s1][s2] = uint8_t(d);
                   break;
               }
           }