X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=src%2Fsquare.h;h=7a59e078fdc7ec4a02a0a7e2068752778a513668;hb=cb7f20913e04b051fea6ac9a4055a4e86be452d1;hp=4d427e8e1072d5400bf5c89e3aaea15cde0802ef;hpb=a5ae7fe26030bdd73a95fde3ebe841abfe84ec5e;p=stockfish diff --git a/src/square.h b/src/square.h index 4d427e8e..7a59e078 100644 --- a/src/square.h +++ b/src/square.h @@ -57,11 +57,15 @@ enum Rank { }; enum SquareDelta { - DELTA_SSW = -021, DELTA_SS = -020, DELTA_SSE = -017, DELTA_SWW = -012, - DELTA_SW = -011, DELTA_S = -010, DELTA_SE = -07, DELTA_SEE = -06, - DELTA_W = -01, DELTA_ZERO = 0, DELTA_E = 01, DELTA_NWW = 06, DELTA_NW = 07, - DELTA_N = 010, DELTA_NE = 011, DELTA_NEE = 012, DELTA_NNW = 017, - DELTA_NN = 020, DELTA_NNE = 021 + + DELTA_N = 8, DELTA_E = 1, DELTA_S = -8, DELTA_W = -1, DELTA_NONE = 0, + + DELTA_NN = DELTA_N + DELTA_N, + DELTA_NE = DELTA_N + DELTA_E, + DELTA_SE = DELTA_S + DELTA_E, + DELTA_SS = DELTA_S + DELTA_S, + DELTA_SW = DELTA_S + DELTA_W, + DELTA_NW = DELTA_N + DELTA_W }; ENABLE_OPERATORS_ON(Square); @@ -74,8 +78,10 @@ ENABLE_OPERATORS_ON(SquareDelta); //// Constants //// -const int FlipMask = 070; -const int FlopMask = 07; +const int FlipMask = 56; +const int FlopMask = 7; + +extern int8_t DirectionTable[64][64]; //// @@ -160,10 +166,6 @@ inline char rank_to_char(Rank r) { return char(r - RANK_1 + int('1')); } -inline Square square_from_string(const std::string& str) { - return make_square(file_from_char(str[0]), rank_from_char(str[1])); -} - inline const std::string square_to_string(Square s) { return std::string(1, file_to_char(square_file(s))) + std::string(1, rank_to_char(square_rank(s))); @@ -181,4 +183,20 @@ inline bool square_is_ok(Square s) { return file_is_ok(square_file(s)) && rank_is_ok(square_rank(s)); } +inline bool squares_aligned(Square s1, Square s2, Square s3) { + return DirectionTable[s1][s2] != DELTA_NONE + && abs(DirectionTable[s1][s2]) == abs(DirectionTable[s2][s3]); +} + +inline bool direction_is_straight(Square s1, Square s2) { + return abs(DirectionTable[s1][s2]) == DELTA_N + || abs(DirectionTable[s1][s2]) == DELTA_E; +} + +//// +//// Prototypes +//// + +extern void init_direction_table(); + #endif // !defined(SQUARE_H_INCLUDED)