2#include "gaia/config/config.h"
7#include "gaia/cnt/bitset_iterator.h"
13 template <u
int32_t NBits>
18 static_assert(
NBits > 0);
21 template <
bool Use32Bit>
22 struct size_type_selector {
23 using type = std::conditional_t<Use32Bit, uint32_t, uint64_t>;
33 using size_type =
typename size_type_selector<BitsPerItem == 32>::type;
83 return iter(*
this, 0,
true);
140 if (m_data[
i] != other.m_data[
i])
151 if (m_data[
i] == other.m_data[
i])
159 if constexpr (HasTrailingBits) {
161 m_data[
Items - 1] = LastItemMask;
181 if constexpr (HasTrailingBits) {
182 GAIA_FOR(
Items - 1) m_data[
i] = ~m_data[
i];
183 m_data[
Items - 1] = (~m_data[
Items - 1]) & LastItemMask;
185 GAIA_FOR(
Items) m_data[
i] = ~m_data[
i];
215 const auto diff = to - from;
239 GAIA_FOR(
Items) m_data[
i] = 0;
259 GAIA_NODISCARD
constexpr bool all()
const {
260 if constexpr (HasTrailingBits) {
261 GAIA_FOR(
Items - 1) {
265 return (m_data[
Items - 1] & LastItemMask) == LastItemMask;
277 GAIA_NODISCARD
constexpr bool any()
const {
287 GAIA_NODISCARD
constexpr bool none()
const {
300 GAIA_MSVC_WARNING_PUSH()
301 GAIA_MSVC_WARNING_DISABLE(4244)
307 GAIA_MSVC_WARNING_POP()
Fixed-size bit set.
Definition bitset.h:14
constexpr iter end() const
Returns the forward set-bit sentinel.
Definition bitset.h:88
typename size_type_selector< BitsPerItem==32 >::type size_type
Unsigned backing-word type.
Definition bitset.h:33
constexpr iter begin() const
Returns an iterator to the first set bit.
Definition bitset.h:82
static constexpr uint32_t BitCount
Number of addressable bits.
Definition bitset.h:17
const_iterator_inverse< bitset > iter_inv
Forward iterator over unset bit indices.
Definition bitset.h:50
constexpr iter_inv iend() const
Returns the forward unset-bit sentinel.
Definition bitset.h:112
GAIA_NODISCARD constexpr bool operator[](uint32_t pos) const
Tests a bit.
Definition bitset.h:131
GAIA_NODISCARD constexpr bool all() const
Checks if all bits are set.
Definition bitset.h:259
static constexpr uint32_t BitsPerItem
Number of bits stored in each backing word.
Definition bitset.h:28
constexpr size_type * data()
Returns the mutable backing-word storage.
Definition bitset.h:64
constexpr void reset()
Unsets all bits.
Definition bitset.h:238
constexpr iter_rev_inv riend() const
Returns the reverse unset-bit sentinel.
Definition bitset.h:124
constexpr iter_inv ibegin() const
Returns an iterator to the first unset bit.
Definition bitset.h:106
GAIA_NODISCARD constexpr bool none() const
Checks if all bits are reset.
Definition bitset.h:287
GAIA_NODISCARD constexpr bool test(uint32_t pos) const
Returns the value of one bit.
Definition bitset.h:252
static constexpr uint32_t Items
Number of backing words.
Definition bitset.h:30
GAIA_NODISCARD uint32_t count() const
Returns the number of set bits.
Definition bitset.h:297
constexpr void reset(uint32_t pos)
Unsets one bit.
Definition bitset.h:244
GAIA_NODISCARD constexpr bool operator!=(const bitset &other) const
Compares two bit sets for inequality.
Definition bitset.h:149
constexpr iter_rev rbegin() const
Returns an iterator to the last set bit.
Definition bitset.h:94
constexpr void set(uint32_t pos, bool value=true)
Sets the bit at the given position.
Definition bitset.h:170
constexpr bitset & flip(uint32_t bitFrom, uint32_t bitTo)
Flips an inclusive range of bits.
Definition bitset.h:203
constexpr const size_type * data() const
Returns the immutable backing-word storage.
Definition bitset.h:70
GAIA_NODISCARD constexpr uint32_t size() const
Returns the number of bits the bitset can hold.
Definition bitset.h:314
GAIA_NODISCARD constexpr bool any() const
Checks if any bit is set.
Definition bitset.h:277
GAIA_NODISCARD constexpr bool operator==(const bitset &other) const
Compares two bit sets for equality.
Definition bitset.h:138
const_reverse_iterator< bitset > iter_rev
Reverse iterator over set bit indices.
Definition bitset.h:52
const_reverse_inverse_iterator< bitset > iter_rev_inv
Reverse iterator over unset bit indices.
Definition bitset.h:54
constexpr iter_rev_inv ribegin() const
Returns an iterator to the last unset bit.
Definition bitset.h:118
constexpr void set()
Sets all bits.
Definition bitset.h:158
const_iterator< bitset > iter
Forward iterator over set bit indices.
Definition bitset.h:48
constexpr iter_rev rend() const
Returns the reverse set-bit sentinel.
Definition bitset.h:100
GAIA_NODISCARD constexpr uint32_t items() const
Returns the number of words used by the bitset internally.
Definition bitset.h:76
constexpr bitset & flip()
Flips all bits.
Definition bitset.h:180
constexpr void flip(uint32_t pos)
Flips one bit.
Definition bitset.h:192
Array with variable size of elements of type.
Definition darray_impl.h:27