23 #define TEST_BIT(val, bit_no) \
24 (((val) & (1u << (bit_no))) == (1u << (bit_no)))
27 #define _BV_BYTES(bits) ((((bits) -1) / 8) + 1)
28 #define _BV_BYTE_INDEX(bits) ((bits) / 8)
29 #define _BV_BITMASK(bit) (1u << ((bit) &0x7))
31 #define _BV_ASSERT(bv, bit) \
32 fc_assert((bit) >= 0 && (bit) < (signed int) sizeof((bv).vec) * 8)
34 #define _BV_ASSERT(bv, bit) (void) 0
37 template <
class BV>
inline bool BV_ISSET(
const BV &bv,
int bit)
44 #define BV_SET(bv, bit) \
46 _BV_ASSERT(bv, bit); \
47 (bv).vec[_BV_BYTE_INDEX(bit)] |= _BV_BITMASK(bit); \
49 #define BV_CLR(bv, bit) \
51 _BV_ASSERT(bv, bit); \
52 (bv).vec[_BV_BYTE_INDEX(bit)] &= ~_BV_BITMASK(bit); \
54 #define BV_SET_VAL(bv, bit, val) \
62 #define BV_CLR_ALL(bv) \
64 memset((bv).vec, 0, sizeof((bv).vec)); \
66 #define BV_SET_ALL(bv) \
68 memset((bv).vec, 0xff, sizeof((bv).vec)); \
71 bool bv_check_mask(
const unsigned char *vec1,
const unsigned char *vec2,
72 size_t size1,
size_t size2);
73 #define BV_CHECK_MASK(vec1, vec2) \
74 bv_check_mask((vec1).vec, (vec2).vec, sizeof((vec1).vec), \
76 #define BV_ISSET_ANY(vec) BV_CHECK_MASK(vec, vec)
78 bool bv_are_equal(
const unsigned char *vec1,
const unsigned char *vec2,
79 size_t size1,
size_t size2);
80 #define BV_ARE_EQUAL(vec1, vec2) \
81 bv_are_equal((vec1).vec, (vec2).vec, sizeof((vec1).vec), \
84 void bv_set_all_from(
unsigned char *vec_to,
const unsigned char *vec_from,
85 size_t size_to,
size_t size_from);
86 #define BV_SET_ALL_FROM(vec_to, vec_from) \
87 bv_set_all_from((vec_to).vec, (vec_from).vec, sizeof((vec_to).vec), \
88 sizeof((vec_from).vec))
90 void bv_clr_all_from(
unsigned char *vec_to,
const unsigned char *vec_from,
91 size_t size_to,
size_t size_from);
92 #define BV_CLR_ALL_FROM(vec_to, vec_from) \
93 bv_clr_all_from((vec_to).vec, (vec_from).vec, sizeof((vec_to).vec), \
94 sizeof((vec_from).vec))
97 #define BV_DEFINE(name, bits) \
99 unsigned char vec[_BV_BYTES(bits)]; \
bool bv_check_mask(const unsigned char *vec1, const unsigned char *vec2, size_t size1, size_t size2)
Return whether two vectors: vec1 and vec2 have common bits.
void bv_clr_all_from(unsigned char *vec_to, const unsigned char *vec_from, size_t size_to, size_t size_from)
Clear everything that is true in vec_from in vec_to.
#define _BV_BYTE_INDEX(bits)
bool bv_are_equal(const unsigned char *vec1, const unsigned char *vec2, size_t size1, size_t size2)
Compares elements of two bitvectors.
bool is_any_set(QBitArray &ba)
bool BV_ISSET(const BV &bv, int bit)
void bv_set_all_from(unsigned char *vec_to, const unsigned char *vec_from, size_t size_to, size_t size_from)
Set everything that is true in vec_from in vec_to.
#define fc_assert_ret_val(condition, val)