bitf.h: some pedantry to properly round up bitfield index sizes

parent 290673d8
......@@ -50,10 +50,12 @@ struct bitf {
bitf_word_t bits[];
};
// devide with round up
#define divceil(n, d) (((n) + ((d) - 1)) / (d))
#define wsz sizeof(bitf_word_t)
#define wbits (wsz * 8)
#define index_thr (wbits * 8)
#define bitf_words(bits) ((((bits + 7) / 8) + wsz - 1) / wsz)
#define bitf_words(bits) (divceil(bits, wbits))
#define bitf_sz1(bits) (sizeof(struct bitf) + bitf_words(bits) * wsz)
static inline size_t
......@@ -63,8 +65,7 @@ bitf_sz(size_t bits)
sz = bitf_sz1(bits);
while (bits > index_thr) {
bits /= wbits;
bits++;
bits = divceil(bits, wbits);
sz += bitf_sz1(bits);
}
return (sz);
......@@ -94,8 +95,7 @@ bitf_init(void *p, size_t bits, size_t space)
bitf->nbits = bits;
if (bits > index_thr) {
bits /= wbits;
bits++;
bits = divceil(bits, wbits);
pp = p;
pp += sz;
space -= sz;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment