stellarUCI Chess engine written in C++20 |
git clone git://git.dimitrijedobrota.com/stellar.git |
Log | Files | Refs | README | LICENSE |
bit.hpp (878B)
0 #ifndef STELLAR_BIT_H 1 #define STELLAR_BIT_H 2 3 #include "utils.hpp" 4 #include <bit> 5 6 namespace bit { 7 8 inline constexpr bool get(const U64 &bitboard, uint8_t square) { return (bitboard >> square) & C64(1); } 9 inline constexpr void set(U64 &bitboard, uint8_t square) { bitboard |= (C64(1) << square); } 10 inline constexpr void pop(U64 &bitboard, uint8_t square) { bitboard &= ~(C64(1) << square); } 11 12 inline constexpr uint8_t count(U64 bitboard) { return std::popcount(bitboard); } 13 inline constexpr uint8_t lsb_index(U64 bitboard) { return std::countr_zero(bitboard); } 14 inline constexpr U64 &lsb_pop(U64 &bitboard) { return bitboard = bitboard & (bitboard - 1); } 15 16 #define bitboard_for_each_bit(var, bb) \ 17 for (var = bit::lsb_index(bb); bb; bit::lsb_pop(bb), var = bit::lsb_index(bb)) 18 19 } // namespace bit 20 21 #endif