cdef extern from 'set.h': #ctypedef _Set Set #ctypedef _SetEntry SetEntry ctypedef void *SetValue ctypedef struct SetEntry: SetValue data SetEntry *next ctypedef struct Set: SetEntry **table unsigned int entries unsigned int table_size unsigned int prime_index #SetHashFunc hash_func #SetEqualFunc equal_func #SetFreeFunc free_func ctypedef struct SetIterator: pass ctypedef unsigned int (*SetHashFunc)(SetValue value) ctypedef bint (*SetEqualFunc)(SetValue value1, SetValue value2) ctypedef void (*SetFreeFunc)(SetValue value) Set *set_new(SetHashFunc hash_func, SetEqualFunc equal_func) void set_free(Set *set) # TODO This should return an int, ideally. See # https://github.com/fragglet/c-algorithms/issues/20 bint set_insert(Set *set, SetValue data) bint set_query(Set *set, SetValue data) unsigned int set_num_entries(Set *set) SetValue *set_to_array(Set *set) Set *set_union(Set *set1, Set *set2) Set *set_intersection(Set *set1, Set *set2) void set_iterate(Set *set, SetIterator *iter) bint set_iter_has_more(SetIterator *iterator) SetValue set_iter_next(SetIterator *iterator)