@@ -116,15 +116,17 @@ _POSSIBLY_CONSTEXPR std::array<uint64_t, 64> BishopMagics = {
116116};
117117
118118// clang-format on
119- template <auto AttackFunc, size_t TableSize, bool IsBishop> _POSSIBLY_CONSTEXPR std::pair<std::array<Magic, 64 >, std::array<Bitboard, TableSize>> generate_magic_table () {
119+ template <auto AttackFunc, size_t TableSize, bool IsBishop>
120+ _POSSIBLY_CONSTEXPR std::pair<std::array<Magic, 64 >, std::array<Bitboard, TableSize>> generate_magic_table () {
120121 std::array<Magic, 64 > table{};
121122 std::array<Bitboard, TableSize> attacks{};
122123
123124 size_t offset = 0 ;
124125
125126 for (Square sq = SQ_A1; sq < SQ_NONE; ++sq) {
126127 Bitboard occ = 0 ;
127- Bitboard edges = ((attacks::MASK_RANK[0 ] | attacks::MASK_RANK[7 ]) & ~attacks::MASK_RANK[rank_of (sq)]) | ((attacks::MASK_FILE[0 ] | attacks::MASK_FILE[7 ]) & ~attacks::MASK_FILE[file_of (sq)]);
128+ Bitboard edges = ((attacks::MASK_RANK[0 ] | attacks::MASK_RANK[7 ]) & ~attacks::MASK_RANK[rank_of (sq)]) |
129+ ((attacks::MASK_FILE[0 ] | attacks::MASK_FILE[7 ]) & ~attacks::MASK_FILE[file_of (sq)]);
128130
129131 Bitboard mask = AttackFunc (static_cast <Square>(sq), 0 ) & ~edges;
130132 int bits = popcount (mask);
@@ -156,33 +158,13 @@ template <auto AttackFunc, size_t TableSize, bool IsBishop> _POSSIBLY_CONSTEXPR
156158
157159 return std::pair{ table, attacks };
158160}
159- _POSSIBLY_CONSTEXPR std::pair<std::array<Magic, 64 >, std::array<Bitboard, 0x1480 >> bishopData = generate_magic_table<_chess::_HyperbolaBishopAttacks, 0x1480 , true >();
161+ _POSSIBLY_CONSTEXPR std::pair<std::array<Magic, 64 >, std::array<Bitboard, 0x1480 >> bishopData =
162+ generate_magic_table<_chess::_HyperbolaBishopAttacks, 0x1480 , true >();
160163_POSSIBLY_CONSTEXPR std::array<Magic, 64 > BishopTable = bishopData.first;
161164_POSSIBLY_CONSTEXPR std::array<Bitboard, 0x1480 > BishopAttacks = bishopData.second;
162165
163- _POSSIBLY_CONSTEXPR std::pair<std::array<Magic, 64 >, std::array<Bitboard, 0x19000 >> rookData = generate_magic_table<_chess::_HyperbolaRookAttacks, 0x19000 , false >();
166+ _POSSIBLY_CONSTEXPR std::pair<std::array<Magic, 64 >, std::array<Bitboard, 0x19000 >> rookData =
167+ generate_magic_table<_chess::_HyperbolaRookAttacks, 0x19000 , false >();
164168_POSSIBLY_CONSTEXPR std::array<Magic, 64 > RookTable = rookData.first;
165169_POSSIBLY_CONSTEXPR std::array<Bitboard, 0x19000 > RookAttacks = rookData.second;
166- } // namespace chess::attacks
167-
168- namespace chess ::movegen {
169- inline static _POSSIBLY_CONSTEXPR Bitboard att (PieceType pt, Square sq, Bitboard occ) { return (pt == BISHOP) ? _chess::_HyperbolaBishopAttacks (sq, occ) : _chess ::_HyperbolaRookAttacks (sq, occ); }
170-
171- inline static _POSSIBLY_CONSTEXPR std::array<std::array<Bitboard, 64 >, 64 > generate_between () {
172- std::array<std::array<Bitboard, 64 >, 64 > squares_between_bb{};
173-
174- for (int sq1 = 0 ; sq1 < 64 ; ++sq1) {
175- for (PieceType pt : { BISHOP, ROOK }) {
176- for (int sq2 = 0 ; sq2 < 64 ; ++sq2) {
177- if (att (pt, Square (sq1), 0 ) & (1ULL << sq2)) {
178- squares_between_bb[sq1][sq2] = att (pt, Square (sq1), 1ULL << (sq2)) & att (pt, Square (sq2), 1ULL << (sq1));
179- }
180- squares_between_bb[sq1][sq2] |= 1ULL << (sq2);
181- }
182- }
183- }
184-
185- return squares_between_bb;
186- }
187- _POSSIBLY_CONSTEXPR std::array<std::array<Bitboard, 64 >, 64 > SQUARES_BETWEEN_BB = generate_between();
188- } // namespace chess::movegen
170+ } // namespace chess::attacks
0 commit comments