Set *set_intersection(Set *a, Set *b) { Set *r = NULL; for (; a; a = a->next) if (set_has(b, a->v)) r = set_add(r, a->v); return r; }
Set *set_union(Set *a, Set *b) { Set *r = b; for (; a; a = a->next) if (!set_has(b, a->v)) r = set_add(r, a->v); return r; }
void set_add ( set* s, SETDATA* d ) { if (set_has(s, d)) return; s->items[s->size] = d; s->size = s->size + 1; }
void set_difference ( set* result, set* a, set* b ) { for (int i = 0; i < a->size; i++) { if (!set_has(b, a->items[i])) set_add(result, a->items[i]); } }
void set_intersection ( set* result, set* a, set* b ) { for (int i = 0; i < a->size; i++) { if (set_has(b, a->items[i])) set_add(result, a->items[i]); } }