/* set.h Pedro Flynn - pflynn@microsoftsucks.org */ #ifndef SET_H #define SET_H #include #include typedef struct SetElmt_ { void* se_data; struct SetElmt_* se_next; } SetElmt; typedef struct Set_ { int s_size; SetElmt* s_first; SetElmt* s_last; int (*s_match)(const void*,const void*); void (*s_destroy)(void*); } Set; #define SET_NEXT(element) ((element)->se_next) #define SET_DATA(element) ((element)->se_data) #define SET_FIRST(set) ((set)->s_first) #define SET_LAST(set) ((set)->s_last) #define SET_SIZE(set) ((set)->s_size) Set* set_create(int (*s_match)(const void*,const void*),void (*s_destroy)(void*)); int set_insert_element_no_compare(Set* set,SetElmt* prev,const void* data); int set_insert_element(Set* set,const void* data); int set_is_member(const Set* set,const void* data); int set_remove_element_no_compare(Set* set,SetElmt* prev,void** data); int set_remove_element(Set* set,void** data); void set_empty(Set* set); void set_destroy(Set* set); Set* set_union(Set* set1,Set* set2); Set* set_intersection(Set* set1,Set* set2); Set* set_diference(Set* set1,Set* set2); int set_is_subset(Set* set1,Set* set2); int set_is_equal(Set* set1,Set* set2); #endif