]> git.sesse.net Git - stockfish/blobdiff - src/direction.cpp
Retire enum Direction
[stockfish] / src / direction.cpp
index 0210381d86e6d0765694b28ce3b9326087f1e091..ebff65b16b9b781f307810524a005f2f32cab3cc 100644 (file)
 
 #include "square.h"
 
+int8_t DirectionTable[64][64];
 
-////
-//// Local definitions
-////
 
-namespace {
+static SquareDelta direction(Square orig, Square dest) {
 
-  const SquareDelta directionToDelta[] = {
-      DELTA_E, DELTA_W, DELTA_N, DELTA_S, DELTA_NE, DELTA_SW, DELTA_NW, DELTA_SE
+  const SquareDelta directions[] = {
+      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);
-  }
-
-}
-
-
-////
-//// Variables
-////
+  Square from, to;
 
-uint8_t DirectionTable[64][64];
-uint8_t SignedDirectionTable[64][64];
+  for (int idx = 0; idx < 8; idx++)
+  {
+      from = orig;
+      to = from + directions[idx];
 
+      while (to != dest && square_distance(to, from) == 1 && square_is_ok(to))
+      {
+          from = to;
+          to += directions[idx];
+      }
 
-////
-//// Functions
-////
+      if (to == dest && square_distance(from, to) == 1)
+          return directions[idx];
+  }
+  return DELTA_NONE;
+}
 
 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++)
-          {
-              if (reachable(s1, s2, d))
-              {
-                  SignedDirectionTable[s1][s2] = uint8_t(d);
-                  DirectionTable[s1][s2] = uint8_t(d / 2);
-                  break;
-              }
-          }
-      }
+          DirectionTable[s1][s2] = uint8_t(direction(s1, s2));
 }