• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /barrelfish-2018-10-04/lib/bitmap/

Lines Matching refs:bm

60     struct bitmap *bm = calloc(1, sizeof(*bm) + BITMAP_DATA_SIZE(nbits));
61 if (bm == NULL) {
65 bm->nbits = nbits;
66 bm->data = (bitmap_data_t *)(bm + 1);
68 return bm;
74 * \param bm bitmap to be freed
76 void bitmap_free(struct bitmap *bm)
78 if (bm) {
79 free(bm);
94 * \param bm bitmap to format
99 size_t bitmap_format(char *outbuf, size_t length, struct bitmap *bm, uint8_t hex)
126 * \param bm bitmap to serialize
130 errval_t bitmap_serialize(void *dest, size_t length, const struct bitmap *bm)
139 * \param bm bitmap to store the serialized data
146 errval_t bitmap_deserialize(struct bitmap *bm, const void *src, size_t length)
161 * \param bm bitmap to determine the bytes for
165 uint32_t bitmap_get_nbytes(const struct bitmap *bm)
167 return (bitmap_bit_t)(BITMAP_DATA_SIZE(bm->nbits) * sizeof(bitmap_data_t));
173 * \param bm the bitmap
177 uint32_t bitmap_get_nbits(const struct bitmap *bm)
179 return bm->nbits;
185 * \param bm the bitmap
189 uint32_t bitmap_get_weight(const struct bitmap *bm)
191 return bm->weight;
197 * \param bm the bitmap
201 void *bitmap_raw(struct bitmap *bm)
203 return bm->data;
215 * \param bm bitmap to check
221 bool bitmap_is_bit_set(const struct bitmap *bm, bitmap_bit_t i)
223 if (i < bm->nbits) {
224 bitmap_data_t data = bm->data[i/BITMAP_BITS_PER_ELEMENT];
234 * \param bm bitmap to check
240 bool bitmap_is_bit_clear(const struct bitmap *bm, bitmap_bit_t i)
242 return !bitmap_is_bit_set(bm, i);
248 * \param bm bitmap to check
253 bool bitmap_is_all_set(const struct bitmap *bm)
255 return (bm->weight == bm->nbits);
261 * \param bm bitmap to check
266 bool bitmap_is_all_clear(const struct bitmap *bm)
268 return (bm->weight == 0);
274 * \param bm bitmap to get the first set bit
279 bitmap_bit_t bitmap_get_first(const struct bitmap *bm)
281 if (bm->weight) {
282 return bm->first;
291 * \param bm bitmap to get the last set bit
296 bitmap_bit_t bitmap_get_last(const struct bitmap *bm)
298 if (bm->weight) {
299 return bm->last;
307 * \param bm the bitmap to check
313 bitmap_bit_t bitmap_get_next(const struct bitmap *bm, bitmap_bit_t i)
315 for (bitmap_bit_t k = i+1; k < bm->nbits; ++k) {
316 if (bitmap_is_bit_set(bm, k)) {
326 * \param bm the bitmap to check
332 bitmap_bit_t bitmap_get_prev(const struct bitmap *bm, bitmap_bit_t i)
334 if (i < bm->nbits) {
336 if (bitmap_is_bit_set(bm, k)) {
354 * \param bm bitmap to set the bit
357 void bitmap_set_bit(struct bitmap *bm, bitmap_bit_t i)
359 if (i < bm->nbits) {
360 bitmap_data_t data = bm->data[i/BITMAP_BITS_PER_ELEMENT];
365 bm->data[i/BITMAP_BITS_PER_ELEMENT] = data;
366 if (bm->weight) {
367 if (bm->last < i) {
368 bm->last = i;
369 } else if (bm->first > i) {
370 bm->first = i;
373 bm->first = i;
374 bm->last = i;
376 bm->weight++;
384 * \param bm bitmap to set the bit
387 void bitmap_clear_bit(struct bitmap *bm, bitmap_bit_t i)
389 if (i < bm->nbits) {
390 bitmap_data_t data = bm->data[i/BITMAP_BITS_PER_ELEMENT];
394 bm->weight--;
396 bm->data[i/BITMAP_BITS_PER_ELEMENT] = data;
397 if (bm->weight) {
398 if (bm->last == i) {
399 bm->last = bitmap_get_prev(bm, i);
400 } else if (bm->first == i) {
401 bm->first = bitmap_get_next(bm, i);
404 bm->first = BITMAP_BIT_NONE;
405 bm->last = BITMAP_BIT_NONE;
414 * \param bm bitmap to set all bits
416 void bitmap_set_all(struct bitmap *bm)
418 memset(bm->data, 0xFF, bitmap_get_nbytes(bm));
419 bm->weight = bm->nbits;
420 bm->last = bm->nbits - 1;
421 bm->first = 0;
427 * \param bm bitmap to clear all bits
429 void bitmap_clear_all(struct bitmap *bm)
431 memset(bm->data, 0, bitmap_get_nbytes(bm));
432 bm->weight = 0;
433 bm->first = BITMAP_BIT_NONE;
434 bm->last = BITMAP_BIT_NONE;
440 * \param bm bitmap to set the range
444 void bitmap_set_range(struct bitmap *bm, bitmap_bit_t from, bitmap_bit_t to)
446 if (to > bm->nbits) {
447 to = bm->nbits - 1;
450 bitmap_set_bit(bm, i);
457 * \param bm bitmap to set the range
461 void bitmap_clear_range(struct bitmap *bm, bitmap_bit_t from, bitmap_bit_t to)
463 if (to > bm->nbits) {
464 to = bm->nbits - 1;
467 bitmap_clear_bit(bm, i);
474 * \param bm bitmap to set the range
478 void bitmap_keep_range(struct bitmap *bm, uint32_t from, uint32_t to)
481 bitmap_clear_range(bm, 0, from - 1);
484 if (to != bm->nbits - 1) {
485 bitmap_clear_range(bm, to, bm->nbits);
628 * \param bm the bitmap
630 void bitmap_complement(struct bitmap *bm)
632 bitmap_bit_t dst_bytes = BITMAP_DATA_SIZE(bm->nbits) - 1;
635 bm->data[i] = ~bm->data[i];
638 for (bitmap_bit_t i = (dst_bytes * sizeof(bitmap_data_t)); i < bm->nbits; ++i) {
639 if (bitmap_is_bit_set(bm, i)) {
640 bitmap_clear_bit(bm, i);
642 bitmap_set_bit(bm, i);
650 * \param bm the bitmap
653 void bitmap_shift_right(struct bitmap *bm, bitmap_bit_t n)
661 * \param bm the bitmap
664 void bitmap_shift_left(struct bitmap *bm, bitmap_bit_t n)
759 void bitmap_dump(const struct bitmap *bm)
761 uint8_t *data = (uint8_t *)(bm->data);
763 debug_printf("dumping contents of bitmap %p\n", bm);
765 for (uint32_t i = 0; i < bitmap_get_nbytes(bm); i += 4) {