X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Fbitmap%2Fbitmap.h;h=6cbf9a22140655a3f55277edc44a5ff23c06f9e0;hp=34faf500ca23a71e97d52a1d7cfd820986cbc17d;hb=f591ef48f887f6c1608cdd89d78eebacd27e8552;hpb=4e7f97a92ef78a956425f8d0d03e57230e131618 diff --git a/ccan/bitmap/bitmap.h b/ccan/bitmap/bitmap.h index 34faf500..6cbf9a22 100644 --- a/ccan/bitmap/bitmap.h +++ b/ccan/bitmap/bitmap.h @@ -30,11 +30,6 @@ static inline size_t bitmap_sizeof(unsigned long nbits) return BITMAP_NWORDS(nbits) * sizeof(bitmap_word); } -static inline bitmap *bitmap_alloc(unsigned long nbits) -{ - return malloc(bitmap_sizeof(nbits)); -} - static inline bitmap_word bitmap_bswap(bitmap_word w) { if (BITMAP_WORD_BITS == 32) @@ -192,4 +187,55 @@ static inline bool bitmap_empty(const bitmap *bitmap, unsigned long nbits) return true; } +unsigned long bitmap_ffs(const bitmap *bitmap, + unsigned long n, unsigned long m); + +/* + * Allocation functions + */ +static inline bitmap *bitmap_alloc(unsigned long nbits) +{ + return malloc(bitmap_sizeof(nbits)); +} + +static inline bitmap *bitmap_alloc0(unsigned long nbits) +{ + bitmap *bitmap; + + bitmap = bitmap_alloc(nbits); + bitmap_zero(bitmap, nbits); + return bitmap; +} + +static inline bitmap *bitmap_alloc1(unsigned long nbits) +{ + bitmap *bitmap; + + bitmap = bitmap_alloc(nbits); + bitmap_fill(bitmap, nbits); + return bitmap; +} + +static inline bitmap *bitmap_realloc0(bitmap *bitmap, + unsigned long obits, unsigned long nbits) +{ + bitmap = realloc(bitmap, bitmap_sizeof(nbits)); + + if (nbits > obits) + bitmap_zero_range(bitmap, obits, nbits); + + return bitmap; +} + +static inline bitmap *bitmap_realloc1(bitmap *bitmap, + unsigned long obits, unsigned long nbits) +{ + bitmap = realloc(bitmap, bitmap_sizeof(nbits)); + + if (nbits > obits) + bitmap_fill_range(bitmap, obits, nbits); + + return bitmap; +} + #endif /* CCAN_BITMAP_H_ */