Cthulhu  0.2.10
Cthulhu compiler collection
bitset.h
Go to the documentation of this file.
1 // SPDX-License-Identifier: LGPL-3.0-only
2 
3 #pragma once
4 
5 #include <ctu_base_api.h>
6 
7 #include "core/analyze.h"
8 
9 #include <stdbool.h>
10 #include <stdint.h>
11 #include <stddef.h>
12 
14 
19 
22 typedef struct bitset_t
23 {
25  STA_FIELD_RANGE(0, SIZE_MAX) size_t words;
26 
28  STA_FIELD_SIZE(words) void *data;
29 } bitset_t;
30 
31 #define CT_BITSET_ARRAY(arr) { sizeof(arr), arr }
32 
42 CT_BASE_API bitset_t bitset_of(STA_READS(words) void *data, size_t words);
43 
51 CT_BASE_API size_t bitset_set_first(bitset_t set, size_t start);
52 
60 CT_BASE_API bool bitset_any(bitset_t set, bitset_t mask);
61 
69 CT_BASE_API bool bitset_all(bitset_t set, bitset_t mask);
70 
78 CT_BASE_API bool bitset_test(bitset_t set, size_t index);
79 
84 CT_BASE_API void bitset_set(bitset_t set, size_t index);
85 
90 CT_BASE_API void bitset_clear(bitset_t set, size_t index);
91 
95 CT_BASE_API void bitset_reset(bitset_t set);
96 
102 CT_PUREFN
103 CT_BASE_API size_t bitset_len(bitset_t set);
104 
106 
#define CT_PUREFN
mark a function as pure, always returns the same value for the same arguments
Definition: analyze.h:228
#define CT_NODISCARD
mark a function as returning a value that must be used
#define STA_READS(size)
annotate a parameter as reading expr elements
CT_PUREFN CT_BASE_API size_t bitset_len(bitset_t set)
get the number of bits in a bitset
Definition: bitset.c:154
CT_PUREFN CT_BASE_API bool bitset_test(bitset_t set, size_t index)
test if a bit is set
Definition: bitset.c:118
CT_PUREFN CT_BASE_API bool bitset_any(bitset_t set, bitset_t mask)
test if any bits in a given mask are set
Definition: bitset.c:82
CT_NODISCARD CT_BASE_API size_t bitset_set_first(bitset_t set, size_t start)
scan for the next free bit and set it
Definition: bitset.c:55
CT_BASE_API void bitset_reset(bitset_t set)
reset all bits in a bitset
Definition: bitset.c:148
CT_PUREFN CT_BASE_API bool bitset_all(bitset_t set, bitset_t mask)
test if all bits in a given mask are set
Definition: bitset.c:100
CT_BASE_API void bitset_set(bitset_t set, size_t index)
set a bit
Definition: bitset.c:128
CT_NODISCARD CT_BASE_API bitset_t bitset_of(STA_READS(words) void *data, size_t words)
create a bitset from a buffer
CT_BASE_API void bitset_clear(bitset_t set, size_t index)
clear a bit
Definition: bitset.c:138
#define CT_BEGIN_API
Definition: compiler.h:129
#define CT_END_API
Definition: compiler.h:130
a bitset
Definition: bitset.h:23
STA_FIELD_SIZE(words) void *data
the data for the bitset
STA_FIELD_RANGE(0, SIZE_MAX) size_t words
the number of bytes in data