Loading...
Searching...
No Matches
Go to the documentation of this file.
11#define CU_BITSET_HEADER(NAME) \
12 NAME##_BitSet NAME##_BitSet_create(void); \
13 void NAME##_BitSet_set(NAME##_BitSet *set, size_t index); \
14 void NAME##_BitSet_clear(NAME##_BitSet *set, size_t index); \
15 bool NAME##_BitSet_get(const NAME##_BitSet *set, size_t index); \
16 void NAME##_BitSet_clear_all(NAME##_BitSet *set); \
17 size_t NAME##_BitSet_size(void);
21#define CU_BITSET_DECL(NAME, SIZE) \
23 alignas(sizeof(size_t)) uint8_t bits[((SIZE) + 7) / 8]; \
25 CU_BITSET_HEADER(NAME)
29#define CU_BITSET_IMPL(NAME, SIZE) \
30 NAME##_BitSet NAME##_BitSet_create(void) { \
31 NAME##_BitSet set = {0}; \
35 void NAME##_BitSet_set(NAME##_BitSet *set, size_t index) { \
37 set->bits[index / 8] |= (1u << (index % 8)); \
41 void NAME##_BitSet_clear(NAME##_BitSet *set, size_t index) { \
43 set->bits[index / 8] &= (uint8_t)~(1u << (index % 8)); \
47 bool NAME##_BitSet_get(const NAME##_BitSet *set, size_t index) { \
48 return index < SIZE && (set->bits[index / 8] & (1u << (index % 8))); \
51 void NAME##_BitSet_clear_all(NAME##_BitSet *set) { \
52 for (size_t i = 0; i < sizeof(set->bits); ++i) { \
57 size_t NAME##_BitSet_size(void) { return SIZE; }