]>
Commit | Line | Data |
---|---|---|
60918275 LP |
1 | /*-*- Mode: C; c-basic-offset: 8 -*-*/ |
2 | ||
3 | #ifndef foosethfoo | |
4 | #define foosethfoo | |
5 | ||
6 | /* Pretty straightforward set implementation. Internally based on the | |
7 | * hashmap. That means that as a minor optimization a NULL set | |
8 | * object will be treated as empty set for all read | |
9 | * operations. That way it is not necessary to instantiate an object | |
10 | * for each set use. */ | |
11 | ||
12 | #include "hashmap.h" | |
13 | ||
14 | typedef struct Set Set; | |
15 | ||
16 | Set *set_new(hash_func_t hash_func, compare_func_t compare_func); | |
91cdde8a LP |
17 | Set* set_copy(Set *s); |
18 | void set_free(Set* s); | |
60918275 LP |
19 | |
20 | int set_put(Set *s, void *value); | |
21 | void *set_get(Set *s, void *value); | |
22 | void *set_remove(Set *s, void *value); | |
23 | ||
91cdde8a LP |
24 | int set_merge(Set *s, Set *other); |
25 | ||
60918275 LP |
26 | unsigned set_size(Set *s); |
27 | bool set_isempty(Set *s); | |
28 | ||
91cdde8a LP |
29 | void *set_iterate(Set *s, void **state); |
30 | void *set_iterate_backwards(Set *s, void **state); | |
60918275 | 31 | |
11dd41ce | 32 | void set_clear(Set *s); |
91cdde8a LP |
33 | void *set_steal_first(Set *s); |
34 | void* set_first(Set *s); | |
35 | void* set_last(Set *s); | |
60918275 LP |
36 | |
37 | #define SET_FOREACH(e, s, state) \ | |
38 | for ((state) = NULL, (e) = set_iterate((s), &(state)); (e); (e) = set_iterate((s), &(state))) | |
39 | ||
40 | #define SET_FOREACH_BACKWARDS(e, s, state) \ | |
41 | for ((state) = NULL, (e) = set_iterate_backwards((s), &(state)); (e); (e) = set_iterate_backwards((s), &(state))) | |
42 | ||
43 | #endif |