Add bitset_hash operator
This commit is contained in:
1 parent
5a9adae6b9
commit
988b7e03ff
1 file changed
+19
-1
+19
-1
@@ -542,6 +542,23 @@ bitset_not(bitset_t dest)
|
||||
BITSETI_CONTRACT(dest);
|
||||
}
|
||||
|
||||
static inline size_t
|
||||
bitset_hash(const bitset_t dest)
|
||||
{
|
||||
BITSETI_CONTRACT(dest);
|
||||
size_t s = dest->size;
|
||||
size_t n = s / BITSET_LIMB_BIT;
|
||||
size_t m = s % BITSET_LIMB_BIT;
|
||||
M_HASH_DECL(hash);
|
||||
for(size_t i = 0 ; i < n; i++)
|
||||
M_HASH_UP(hash, dest->ptr[i]);
|
||||
if (m) {
|
||||
size_t mask = (1UL << m) - 1;
|
||||
M_HASH_UP(hash, (dest->ptr[n] & mask));
|
||||
}
|
||||
return hash;
|
||||
}
|
||||
|
||||
#define BITSET_OPLIST \
|
||||
(INIT(bitset_init) \
|
||||
,INIT_SET(bitset_init_set) \
|
||||
@@ -563,12 +580,13 @@ bitset_not(bitset_t dest)
|
||||
,CLEAN(bitset_clean) \
|
||||
,PUSH(bitset_push_back) \
|
||||
,POP(bitset_pop_back) \
|
||||
,HASH(bitset_hash) \
|
||||
,GET_STR(bitset_get_str) \
|
||||
,OUT_STR(bitset_out_str) \
|
||||
,IN_STR(bitset_in_str) \
|
||||
,EQUAL(bitset_equal_p) \
|
||||
)
|
||||
|
||||
// TODO: set_at2, insert_v, remove_v, shrink_to_fit, hash
|
||||
// TODO: set_at2, insert_v, remove_v, shrink_to_fit
|
||||
|
||||
#endif
|
||||
Reference in new issue
Block a user