34 #define GET_BIT(s,m) (s[(m)/(sizeof(BSetWord)*8)]&(1<<(m&(sizeof(BSetWord)*8-1))))
35 #define SET_BIT(s,m) (s[(m)/(sizeof(BSetWord)*8)]|=(1<<(m&(sizeof(BSetWord)*8-1))))
39 int wsize = 1+size/(
sizeof(
BSetWord)*8);
49 sh->
chunk = chunk * wsize;
81 *allocated += sh->
chunk;
114 assert (member <= sh->size);
122 assert (member <= sh->size);
123 return GET_BIT (src , member) != 0;
147 for (i=sh->
wsize; --i >= 0;)
157 for (i=sh->
wsize; --i >= 0;)
167 for (i=sh->
wsize; --i >= 0; dst++)
177 for (i=sh->
wsize; --i >= 0;)
178 if (*dst++ != *src++)
185 int i = sh->
size - member;
187 unsigned b = member & (
sizeof(
BSetWord)*8-1);
189 if (b == 0 && *sw == 0)
195 else if (*sw & (1<<b))
212 int i = sh->
size - member;
214 unsigned b = member & (
sizeof(
BSetWord)*8-1);
216 if (b == 0 && *sw == (
BSetWord) ~ 0)
222 else if ((*sw & (1<<b)) == 0)
243 for (i=0; (i=
trav_BSet(sh,src,i)) != -1; i++)
266 while ((i1=
trav_BSet (sh, src, i)) == i);
BSetHandle * mk_BSetHandle(int size, int chunk)
void pr_BSet(BSetHandle *sh, BSet src)
int trav_BSet(BSetHandle *sh, BSet src, unsigned member)
void add_BSet(BSetHandle *sh, BSet dst, unsigned member)
void union_BSet(BSetHandle *sh, BSet dst, BSet src)
unsigned hash_BSet(BSetHandle *sh, BSet src)
BSet cp_BSet(BSetHandle *sh, BSet dst, BSet src)
void pr_charBSet(BSetHandle *sh, BSet src, void(*f)(int))
unsigned test_BSet(BSetHandle *sh, BSet src, unsigned member)
void res_BSet(BSetHandle *sh, BSet dst)
BSet mk_BSet(BSetHandle **shp)
void rm_BSetHandle(BSetHandle **shp)
int inf_BSetHandle(BSetHandle *sh, long *used, long *allocated)
int eq_BSet(BSetHandle *sh, BSet dst, BSet src)
int travi_BSet(BSetHandle *sh, BSet src, unsigned member)
void com_BSet(BSetHandle *sh, BSet dst)
void * imalloc(size_t size)
struct BSetHandle_ * setchain