4#if !defined(SKIP_INCLUDES)
10#if !defined EXCLUSIVE_END_INDEX
11 #if !defined PLACEHOLDERS
14 #define EXCLUSIVE_END_INDEX 32
27#define INDICES_CAPACITY (EXCLUSIVE_END_INDEX + 1)
44#define INVARIANT_CHECK(self) DC_ASSUME(self);
67 self->bits[byte] = self->bits[byte] | mask;
69 self->bits[byte] = self->bits[byte] & (~mask);
87 return (self->bits[
byte] & mask) != 0;
116 memcpy(&new_self.
bits, &self->bits,
sizeof(self->bits));
125 size += __builtin_popcount((
unsigned int)self->bits[
byte]);
133#define ITER_CONST NS(SELF, iter_const)
156 !
NS(
SELF,
get)(iter->bitset, iter->next_index)) {
172 .next_index = next_index,
179#define ITER NS(SELF, iter)
200 !
NS(
SELF,
get)(iter->bitset, iter->next_index)) {
216 .next_index = next_index,
223#undef INVARIANT_CHECK
228#undef INDICES_CAPACITY
229#undef EXCLUSIVE_END_INDEX
static void debug(SELF const *self, dc_debug_fmt fmt, FILE *stream)
#define DC_BITSET_STATIC_INDEX_TO_OFFSET(INDEX)
#define DC_BITSET_STATIC_CAPACITY_TO_BYTES(CAPACITY)
#define DC_BITSET_STATIC_INDEX_TO_BYTES(INDEX)
#define DC_BITSET_STATIC_OFFSET_TO_MASK(OFFSET)
static ITER_CONST get_iter_const(SELF const *self)
static ITER get_iter(SELF *self)
static IV_PAIR next(ITER *iter)
static INDEX_TYPE size(SELF const *self)
#define INVARIANT_CHECK(self)
static bool empty_item(IV_PAIR const *item)
static SELF clone(SELF const *self)
static INDEX_TYPE min_index()
static INDEX_TYPE max_index()
static void set(SELF *self, INDEX_TYPE index, bool value)
#define EXCLUSIVE_END_INDEX
A simple bitset for indexes [0, EXCLUSIVE_END_INDEX), statically allocated.
static bool try_set(SELF *self, INDEX_TYPE index, bool value)
#define DC_TRAIT_BITSET(SELF)
dc_debug_fmt dc_debug_fmt_scope_end(dc_debug_fmt fmt)
dc_debug_fmt dc_debug_fmt_scope_begin(dc_debug_fmt fmt)
static void dc_debug_fmt_print(dc_debug_fmt fmt, FILE *stream, const char *format,...)
static dc_gdb_marker dc_gdb_marker_new()
static mutation_tracker mutation_tracker_new()
static void mutation_version_check(mutation_version const *self)
static mutation_version mutation_tracker_get(mutation_tracker const *self)
static void mutation_tracker_mutate(mutation_tracker *self)
#define EXPAND_STRING(NAME)
#define DC_ASSERT(expr,...)
#define DC_ASSUME(expr,...)
#define TEMPLATE_ERROR(...)
With the user provided name, even in nested templates.
mutation_tracker iterator_invalidation_tracker
dc_gdb_marker derive_c_bitset_static
uint8_t bits[DC_BITSET_STATIC_CAPACITY_TO_BYTES(EXCLUSIVE_END_INDEX)]
Debug format helpers for debug printin data structures.
tracks a specific version of a value, so that this can be compared later to check modification For ex...
static FILE * stream(SELF *self)
Opens a file for.