X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fdirection.cpp;h=ebff65b16b9b781f307810524a005f2f32cab3cc;hp=9d805765cf87b4c7a278d652450f5cf98bcc137e;hb=cb7f20913e04b051fea6ac9a4055a4e86be452d1;hpb=9fc602bae74b8e09bd45ace3b42a8ce84d56b23c diff --git a/src/direction.cpp b/src/direction.cpp index 9d805765..ebff65b1 100644 --- a/src/direction.cpp +++ b/src/direction.cpp @@ -22,66 +22,39 @@ //// Includes //// -#include "direction.h" #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)); }