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));