blob: bcf1a24404bb602b2ac1d19cbea0cec5ed641f0b [file] [log] [blame]
#ifndef _BITMAP_H_
#define _BITMAP_H_
#include <cass_type.h>
#undef howmany
#undef roundup
#undef roundup2
#undef powerof2
#undef rounddown
#define powerof2(x) (((x)&((x)-1))==0)
#define howmany(x, y) (((x)+((y)-1))/(y))
#define roundup(x, y) ((((x)+((y)-1))/(y))*(y))
#define roundup2(x, y) (((x)+((y)-1))&(~((y)-1)))
#define rounddown(x, y) (((x)/(y))*(y))
#define bitbyte(bit) ((bit) >> 3)
#define bitmask(bit) (1<<((bit)&0x7))
#define bitsize(nbits) (((nbits)+7)>>3)
#define bittest(map, bit) ((map)[bitbyte(bit)]&bitmask(bit))
#define bitisset(map, bit) ((map)[bitbyte(bit)]&bitmask(bit))
#define bitisclear(map, bit) (((map)[bitbyte(bit)]&bitmask(bit))==0)
#define bitset(map, bit) ((map)[bitbyte(bit)] |= bitmask(bit))
#define bitclear(map, bit) ((map)[bitbyte(bit)] &= ~bitmask(bit))
typedef struct bitmap_t {
uint32_t size; /* size in bits */
uint32_t count; /* number of non-zero entries */
uchar *vec;
} bitmap_t;
bitmap_t *bitmap_new(uint32_t size);
int bitmap_free(bitmap_t **map);
int bitmap_init(bitmap_t *map, uint32_t size);
int bitmap_clear(bitmap_t *map);
int bitmap_free_vec(bitmap_t *map);
uint32_t bitmap_get_count(bitmap_t *map);
uint32_t bitmap_get_size(bitmap_t *map);
int bitmap_print(bitmap_t *map);
int bitmap_insert(bitmap_t *map, uint32_t x);
int bitmap_contain(bitmap_t *map, uint32_t x);
int bitmap_union(bitmap_t *mapA, bitmap_t *mapB);
uint32_t bitmap_getNext(bitmap_t *map, uint32_t cur);
#endif /* _BITMAP_H_ */