#include <stdbool.h>
#include <stddef.h>
#include <inttypes.h>
Go to the source code of this file.
|
| struct bitmap * | bitmap_create (size_t bit_cnt) |
| |
| struct bitmap * | bitmap_create_in_buf (size_t bit_cnt, void *, size_t byte_cnt) |
| |
| size_t | bitmap_buf_size (size_t bit_cnt) |
| |
| void | bitmap_destroy (struct bitmap *) |
| |
| size_t | bitmap_size (const struct bitmap *) |
| |
| void | bitmap_set (struct bitmap *, size_t idx, bool) |
| |
| void | bitmap_mark (struct bitmap *, size_t idx) |
| |
| void | bitmap_reset (struct bitmap *, size_t idx) |
| |
| void | bitmap_flip (struct bitmap *, size_t idx) |
| |
| bool | bitmap_test (const struct bitmap *, size_t idx) |
| |
| void | bitmap_set_all (struct bitmap *, bool) |
| |
| void | bitmap_set_multiple (struct bitmap *, size_t start, size_t cnt, bool) |
| |
| size_t | bitmap_count (const struct bitmap *, size_t start, size_t cnt, bool) |
| |
| bool | bitmap_contains (const struct bitmap *, size_t start, size_t cnt, bool) |
| |
| bool | bitmap_any (const struct bitmap *, size_t start, size_t cnt) |
| |
| bool | bitmap_none (const struct bitmap *, size_t start, size_t cnt) |
| |
| bool | bitmap_all (const struct bitmap *, size_t start, size_t cnt) |
| |
| size_t | bitmap_scan (const struct bitmap *, size_t start, size_t cnt, bool) |
| |
| size_t | bitmap_scan_and_flip (struct bitmap *, size_t start, size_t cnt, bool) |
| |
| void | bitmap_dump (const struct bitmap *) |
| |
◆ BITMAP_ERROR
◆ bitmap_all()
260 {
262}
bool bitmap_contains(const struct bitmap *b, size_t start, size_t cnt, bool value)
Definition: bitmap.c:230
◆ bitmap_any()
◆ bitmap_buf_size()
105 {
107}
static size_t byte_cnt(size_t bit_cnt)
Definition: bitmap.c:54
size_t bit_cnt
Definition: bitmap.c:28
◆ bitmap_contains()
230 {
231 size_t i;
232
234 ASSERT (start <= b->bit_cnt);
235 ASSERT (start + cnt <= b->bit_cnt);
236
237 for (i = 0; i < cnt; i++)
239 return true;
240 return false;
241}
bool bitmap_test(const struct bitmap *b, size_t idx)
Definition: bitmap.c:181
#define ASSERT(CONDITION)
Definition: debug.h:30
#define NULL
Definition: stddef.h:4
◆ bitmap_count()
213 {
214 size_t i, value_cnt;
215
217 ASSERT (start <= b->bit_cnt);
218 ASSERT (start + cnt <= b->bit_cnt);
219
220 value_cnt = 0;
221 for (i = 0; i < cnt; i++)
223 value_cnt++;
224 return value_cnt;
225}
◆ bitmap_create()
73 {
80 return b;
81 }
83 }
85}
void bitmap_set_all(struct bitmap *b, bool value)
Definition: bitmap.c:191
void * malloc(size_t) __attribute__((malloc))
Definition: malloc.c:85
void free(void *)
Definition: malloc.c:202
elem_type * bits
Definition: bitmap.c:29
◆ bitmap_create_in_buf()
◆ bitmap_destroy()
| void bitmap_destroy |
( |
struct bitmap * |
b | ) |
|
◆ bitmap_dump()
| void bitmap_dump |
( |
const struct bitmap * |
b | ) |
|
335 {
337}
void hex_dump(uintptr_t ofs, const void *, size_t size, bool ascii)
Definition: stdio.c:553
◆ bitmap_flip()
169 {
172
173
174
175
176 asm (
"lock xorq %1, %0" :
"=m" (b->
bits[idx]) :
"r" (mask) :
"cc");
177}
unsigned long elem_type
Definition: bitmap.c:19
static size_t elem_idx(size_t bit_idx)
Definition: bitmap.c:35
static elem_type bit_mask(size_t bit_idx)
Definition: bitmap.c:42
◆ bitmap_mark()
143 {
146
147
148
149
150 asm (
"lock orq %1, %0" :
"=m" (b->
bits[idx]) :
"r" (mask) :
"cc");
151}
◆ bitmap_none()
◆ bitmap_reset()
155 {
158
159
160
161
162 asm (
"lock andq %1, %0" :
"=m" (b->
bits[idx]) :
"r" (~mask) :
"cc");
163}
◆ bitmap_scan()
271 {
273 ASSERT (start <= b->bit_cnt);
274
275 if (cnt <= b->bit_cnt) {
276 size_t last = b->
bit_cnt - cnt;
277 size_t i;
278 for (i = start; i <= last; i++)
280 return i;
281 }
283}
#define BITMAP_ERROR
Definition: bitmap.h:36
◆ bitmap_scan_and_flip()
293 {
297 return idx;
298}
void bitmap_set_multiple(struct bitmap *b, size_t start, size_t cnt, bool value)
Definition: bitmap.c:199
size_t bitmap_scan(const struct bitmap *b, size_t start, size_t cnt, bool value)
Definition: bitmap.c:271
◆ bitmap_set()
132 {
134 ASSERT (idx < b->bit_cnt);
135 if (value)
137 else
139}
void bitmap_reset(struct bitmap *b, size_t bit_idx)
Definition: bitmap.c:155
void bitmap_mark(struct bitmap *b, size_t bit_idx)
Definition: bitmap.c:143
◆ bitmap_set_all()
| void bitmap_set_all |
( |
struct bitmap * |
b, |
|
|
bool |
value |
|
) |
| |
191 {
193
195}
size_t bitmap_size(const struct bitmap *b)
Definition: bitmap.c:124
◆ bitmap_set_multiple()
199 {
200 size_t i;
201
203 ASSERT (start <= b->bit_cnt);
204 ASSERT (start + cnt <= b->bit_cnt);
205
206 for (i = 0; i < cnt; i++)
208}
void bitmap_set(struct bitmap *b, size_t idx, bool value)
Definition: bitmap.c:132
◆ bitmap_size()
◆ bitmap_test()
181 {
183 ASSERT (idx < b->bit_cnt);
185}