105 #define SETelemsize ((int)sizeof(setelemT)) 142 #define FOREACHsetelement_(type, set, variable) \ 143 if (((variable= NULL), set)) for (\ 144 variable##p= (type **)&((set)->e[0].p); \ 145 (variable= *variable##p++);) 175 #define FOREACHsetelement_i_(qh, type, set, variable) \ 176 if (((variable= NULL), set)) for (\ 177 variable##_i= 0, variable= (type *)((set)->e[0].p), \ 178 variable##_n= qh_setsize(qh, set);\ 179 variable##_i < variable##_n;\ 180 variable= (type *)((set)->e[++variable##_i].p) ) 208 #define FOREACHsetelementreverse_(qh, type, set, variable) \ 209 if (((variable= NULL), set)) for (\ 210 variable##temp= qh_setsize(qh, set)-1, variable= qh_setlast(qh, set);\ 211 variable; variable= \ 212 ((--variable##temp >= 0) ? SETelemt_(set, variable##temp, type) : NULL)) 239 #define FOREACHsetelementreverse12_(type, set, variable) \ 240 if (((variable= NULL), set)) for (\ 241 variable##p= (type **)&((set)->e[1].p); \ 242 (variable= *variable##p); \ 243 variable##p == ((type **)&((set)->e[0].p))?variable##p += 2: \ 244 (variable##p == ((type **)&((set)->e[1].p))?variable##p--:variable##p++)) 271 #define FOREACHelem_(set) FOREACHsetelement_(void, set, elem) 298 #define FOREACHset_(sets) FOREACHsetelement_(setT, sets, set) 313 #define SETindex_(set, elem) ((int)((void **)elem##p - (void **)&(set)->e[1].p)) 324 #define SETref_(elem) (elem##p[-1]) 336 #define SETelem_(set, n) ((set)->e[n].p) 347 #define SETelemt_(set, n, type) ((type*)((set)->e[n].p)) 358 #define SETelemaddr_(set, n, type) ((type **)(&((set)->e[n].p))) 367 #define SETfirst_(set) ((set)->e[0].p) 376 #define SETfirstt_(set, type) ((type*)((set)->e[0].p)) 385 #define SETsecond_(set) ((set)->e[1].p) 393 #define SETsecondt_(set, type) ((type*)((set)->e[1].p)) 401 #define SETaddr_(set,type) ((type **)(&((set)->e[0].p))) 413 #define SETreturnsize_(set, size) (((size)= ((set)->e[(set)->maxsize].i))?(--(size)):((size)= (set)->maxsize)) 424 #define SETempty_(set) (!set || (SETfirst_(set) ? 0 : 1)) 438 #define SETsizeaddr_(set) (&((set)->e[(set)->maxsize])) 450 #define SETtruncate_(set, size) {set->e[set->maxsize].i= size+1; \ 451 set->e[size].p= NULL;} int qh_setindex(setT *set, void *setelem)
int qh_setin(setT *set, void *setelem)
void * qh_setdel(setT *set, void *elem)
void * qh_setdelnth(qhT *qh, setT *set, int nth)
void qh_setappend_set(qhT *qh, setT **setp, setT *setA)
void qh_setcheck(qhT *qh, setT *set, const char *tname, unsigned id)
void qh_settruncate(qhT *qh, setT *set, int size)
void qh_setfree2(qhT *qh, setT **setp, int elemsize)
void qh_setlarger(qhT *qh, setT **setp)
int qh_setsize(qhT *qh, setT *set)
void * qh_setdelsorted(setT *set, void *newelem)
void * qh_setlast(setT *set)
void qh_setfree(qhT *qh, setT **set)
void qh_settemppush(qhT *qh, setT *set)
setT * qh_setnew(qhT *qh, int size)
setT * qh_settemppop(qhT *qh)
void ** qh_setendpointer(setT *set)
void qh_settempfree(qhT *qh, setT **set)
void qh_setprint(qhT *qh, FILE *fp, const char *string, setT *set)
void qh_setappend2ndlast(qhT *qh, setT **setp, void *elem)
int qh_setequal(setT *setA, setT *setB)
setT * qh_setduplicate(qhT *qh, setT *set, int elemsize)
int qh_setunique(qhT *qh, setT **set, void *elem)
void qh_setcompact(qhT *qh, setT *set)
void qh_setfreelong(qhT *qh, setT **set)
void qh_setaddsorted(qhT *qh, setT **setp, void *elem)
void qh_setappend(qhT *qh, setT **setp, void *elem)
void qh_setzero(qhT *qh, setT *set, int idx, int size)
void qh_setaddnth(qhT *qh, setT **setp, int nth, void *newelem)
void * qh_setdellast(setT *set)
setT * qh_setcopy(qhT *qh, setT *set, int extra)
setT * qh_settemp(qhT *qh, int setsize)
setT * qh_setnew_delnthsorted(qhT *qh, setT *set, int size, int nth, int prepend)
void qh_settempfree_all(qhT *qh)
int qh_setequal_except(setT *setA, void *skipelemA, setT *setB, void *skipelemB)
int qh_setequal_skip(setT *setA, int skipA, setT *setB, int skipB)
void * qh_setdelnthsorted(qhT *qh, setT *set, int nth)
void qh_setreplace(qhT *qh, setT *set, void *oldelem, void *newelem)