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