46 typedef uint32_t _bitset_word_t;
47 typedef _bitset_word_t *bitset_t;
49 #define WORD_SIZE(cardinality) (1+((cardinality)+31)/32)
50 #define BYTE_SIZE(cardinality) (WORD_SIZE(cardinality)*sizeof(_bitset_word_t))
51 #define WORD_INDEX(element) (1+(element)/32)
52 #define BIT_INDEX(element) ((element)&037)
55 bitset_add(bitset_t set
56 ,
unsigned int element)
61 [WORD_INDEX(element)] |= (1 << BIT_INDEX(element));
65 bitset_copy(bitset_t to_set, bitset_t from_set)
67 assert(to_set[0] == from_set[0]);
68 memcpy(to_set, from_set, BYTE_SIZE(to_set[0]));
72 bitset_create(bitset_t *set
73 ,
unsigned int cardinality)
76 = (bitset_t) calloc(WORD_SIZE(cardinality),
77 sizeof(_bitset_word_t));
85 bitset_destroy(bitset_t *set
98 bitset_empty(bitset_t set
102 _bitset_word_t result = 0;
103 int nwords = WORD_SIZE(set
105 for (i = 1; i < nwords; i++) {
109 return (result == 0);
113 bitset_contains(bitset_t set
114 ,
unsigned int element)
119 [WORD_INDEX(element)] & (1 << BIT_INDEX(element))));
123 bitset_remove(bitset_t set
124 ,
unsigned int element)
129 [WORD_INDEX(element)] &= ~(1 << BIT_INDEX(element));