diff --git a/include/sbi/sbi_bitmap.h b/include/sbi/sbi_bitmap.h index 596bcc7d..80d3fe3b 100644 --- a/include/sbi/sbi_bitmap.h +++ b/include/sbi/sbi_bitmap.h @@ -143,4 +143,20 @@ static inline int bitmap_weight(const unsigned long *src, int nbits) return res; } +static inline bool bitmap_empty(const unsigned long *src, int nbits) +{ + if (nbits == 0) + return true; + + if (small_const_nbits(nbits)) + return !(*src & BITMAP_LAST_WORD_MASK(nbits)); + else { + size_t i, len = BITS_TO_LONGS(nbits); + for (i = 0; i < len - 1; i++) + if (src[i]) + return false; + return !(src[len - 1] & BITMAP_LAST_WORD_MASK(nbits)); + } +} + #endif