X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fdirection.cpp;h=77a985b1bae683fd696c817d089603390019ff62;hp=0210381d86e6d0765694b28ce3b9326087f1e091;hb=f08a6eed0d3938e451b6da384ae39ffb58f25dd4;hpb=6080fecf9cba9ac063f8f07bd25004c14016bd33 diff --git a/src/direction.cpp b/src/direction.cpp index 0210381d..77a985b1 100644 --- a/src/direction.cpp +++ b/src/direction.cpp @@ -24,61 +24,42 @@ #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; } }