#ifndef LIBFLINT_SET_H
#define LIBFLINT_SET_H

#include "lflinkedlist.h"

#define Set List

void set_init(Set *set, int (*match)(const void *a, const void *b),
              void (*destroy)(void *data));

void set_destroy(Set *set);

int set_insert(Set *set, const void *data);

int set_remove(Set *set, void **data);

int set_union(Set *setu, const Set *a, const Set *b);

int set_intersection(Set *seti, const Set *a, const Set *b);

int set_difference(Set *setd, const Set *a, const Set *b);

int set_is_member(const Set *set, const void *data);

int set_is_subset(const Set *a, const Set *b);

int set_is_equal(const Set *a, const Set *b);

#endif