61 [[nodiscard]] constexpr auto operator==(const
Bitboard&) const noexcept ->
bool = default;
67 [[nodiscard]] constexpr auto
any() const noexcept ->
bool {
return std::cmp_not_equal(value, 0); }
70 [[nodiscard]]
constexpr auto none() const noexcept ->
bool {
return std::cmp_equal(value, 0); }
73 [[nodiscard]]
constexpr auto count() const noexcept ->
size_t {
return static_cast<size_t>(std::popcount(value)); }
76 [[nodiscard]]
constexpr auto test(
const Square square)
const noexcept ->
bool {
return test(square.index()); }
101 constexpr
void set(const
Square square) noexcept {
set(square.index()); }
117 constexpr void clear() noexcept { value = UINT64_C(0); }
122 [[nodiscard]]
constexpr auto to_int() const noexcept ->
Integer {
return value; }
135 [[nodiscard]]
constexpr auto indices() const noexcept;
145 [[nodiscard]] constexpr auto
squares() const noexcept;
158 [[nodiscard]] constexpr auto
subboards() const noexcept;
180 constexpr auto operator<<=(
size_t num) noexcept ->
Bitboard&;
185 constexpr auto operator>>=(
size_t num) noexcept ->
Bitboard&;
202[[nodiscard, gnu::const]]
constexpr auto operator&(
const Bitboard& lhs,
const Bitboard& rhs)
noexcept -> Bitboard;
207[[nodiscard, gnu::const]]
constexpr auto operator|(
const Bitboard& lhs,
const Bitboard& rhs)
noexcept -> Bitboard;
212[[nodiscard, gnu::const]]
constexpr auto operator^(
const Bitboard& lhs,
const Bitboard& rhs)
noexcept -> Bitboard;
217[[nodiscard, gnu::const]]
constexpr auto operator<<(
const Bitboard& board,
size_t num)
noexcept -> Bitboard;
222[[nodiscard, gnu::const]]
constexpr auto operator>>(
const Bitboard& board,
size_t num)
noexcept -> Bitboard;
244 [[nodiscard, gnu::const]]
consteval auto operator""_bb(
245 const unsigned long long value)
noexcept
281 return Bitboard { UINT64_C(1) << square.index() };
288 return std::cmp_not_equal(
289 (value >> index) & UINT64_C(1),
297 value |= UINT64_C(1) << index;
304 const Integer mask { UINT64_C(1) << index };
322 const auto trailingZeroes = std::countl_zero(value);
329 value &= other.value;
335 value |= other.value;
341 value ^= other.value;
414 : value { bitboard.to_int() }
420 constexpr auto operator==([[maybe_unused]] std::default_sentinel_t sentinel)
const noexcept ->
bool
422 return std::cmp_equal(value, 0);
427 return static_cast<value_type>(std::countr_zero(value));
432 assert(std::cmp_greater(value, 0));
434 value &= value - UINT64_C(1);
441 const auto ret { *
this };
454 return std::ranges::subrange {
470 | std::views::transform(
auto print_ascii(Bitboard board) -> std::string
std::uint_fast8_t BitboardIndex
constexpr BitboardIndex NUM_SQUARES
constexpr BitboardIndex MAX_BITBOARD_IDX
constexpr auto operator&(const Bitboard &lhs, const Bitboard &rhs) noexcept -> Bitboard
constexpr auto operator>>(const Bitboard &board, const size_t num) noexcept -> Bitboard
constexpr auto operator|(const Bitboard &lhs, const Bitboard &rhs) noexcept -> Bitboard
constexpr auto operator<<(const Bitboard &board, const size_t num) noexcept -> Bitboard
constexpr auto operator^(const Bitboard &lhs, const Bitboard &rhs) noexcept -> Bitboard
constexpr auto operator>>=(size_t num) noexcept -> Bitboard &
constexpr auto test(const Square square) const noexcept -> bool
constexpr void set(const Square square) noexcept
constexpr auto to_int() const noexcept -> Integer
constexpr auto inverse() const noexcept -> Bitboard
constexpr auto squares() const noexcept
constexpr void clear() noexcept
constexpr auto any() const noexcept -> bool
static constexpr auto from_square(Square square) noexcept -> Bitboard
constexpr auto operator|=(const Bitboard &other) noexcept -> Bitboard &
constexpr Bitboard() noexcept=default
constexpr auto operator<<=(size_t num) noexcept -> Bitboard &
constexpr auto count() const noexcept -> size_t
constexpr auto operator&=(const Bitboard &other) noexcept -> Bitboard &
constexpr auto first() const noexcept -> BitboardIndex
constexpr void unset(const Square square) noexcept
constexpr auto none() const noexcept -> bool
constexpr auto last() const noexcept -> BitboardIndex
constexpr auto subboards() const noexcept
constexpr auto indices() const noexcept
constexpr auto operator^=(const Bitboard &other) noexcept -> Bitboard &
static constexpr auto from_index(BitboardIndex index) noexcept -> Square
constexpr auto operator++() noexcept -> BitboardIterator &
consteval BitboardIterator()=default
constexpr auto operator++(int) noexcept -> BitboardIterator
constexpr auto operator==(const BitboardIterator &other) const noexcept -> bool=default
constexpr auto operator*() const noexcept -> value_type
constexpr BitboardIterator(const Bitboard &bitboard)
std::forward_iterator_tag iterator_category
constexpr auto operator==(std::default_sentinel_t sentinel) const noexcept -> bool
std::ptrdiff_t difference_type
std::forward_iterator_tag iterator_concept