X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fdirection.cpp;h=ebff65b16b9b781f307810524a005f2f32cab3cc;hp=77a985b1bae683fd696c817d089603390019ff62;hb=cb7f20913e04b051fea6ac9a4055a4e86be452d1;hpb=f08a6eed0d3938e451b6da384ae39ffb58f25dd4 diff --git a/src/direction.cpp b/src/direction.cpp index 77a985b1..ebff65b1 100644 --- a/src/direction.cpp +++ b/src/direction.cpp @@ -24,44 +24,37 @@ #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)); }