]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/shared/set.c
cd910d70abbc403eb54ae8eb50871c36f93929d6
[thirdparty/systemd.git] / src / shared / set.c
1 /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
3 /***
4 This file is part of systemd.
5
6 Copyright 2010 Lennart Poettering
7
8 systemd is free software; you can redistribute it and/or modify it
9 under the terms of the GNU Lesser General Public License as published by
10 the Free Software Foundation; either version 2.1 of the License, or
11 (at your option) any later version.
12
13 systemd is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.
17
18 You should have received a copy of the GNU Lesser General Public License
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
20 ***/
21
22 #include <stdlib.h>
23
24 #include "set.h"
25 #include "hashmap.h"
26
27 #define MAKE_SET(h) ((Set*) (h))
28 #define MAKE_HASHMAP(s) ((Hashmap*) (s))
29
30 /* For now this is not much more than a wrapper around a hashmap */
31
32 Set *set_new(hash_func_t hash_func, compare_func_t compare_func) {
33 return MAKE_SET(hashmap_new(hash_func, compare_func));
34 }
35
36 void set_free(Set* s) {
37 hashmap_free(MAKE_HASHMAP(s));
38 }
39
40 void set_freep(Set **s) {
41 if (!s)
42 return;
43
44 set_free(*s);
45 *s = NULL;
46 }
47
48 void set_free_free(Set *s) {
49 hashmap_free_free(MAKE_HASHMAP(s));
50 }
51
52 void set_free_freep(Set **s) {
53 if (!*s)
54 return;
55
56 set_free_free(*s);
57 *s = NULL;
58 }
59
60 int set_ensure_allocated(Set **s, hash_func_t hash_func, compare_func_t compare_func) {
61 return hashmap_ensure_allocated((Hashmap**) s, hash_func, compare_func);
62 }
63
64 int set_put(Set *s, void *value) {
65 return hashmap_put(MAKE_HASHMAP(s), value, value);
66 }
67
68 int set_replace(Set *s, void *value) {
69 return hashmap_replace(MAKE_HASHMAP(s), value, value);
70 }
71
72 void *set_get(Set *s, void *value) {
73 return hashmap_get(MAKE_HASHMAP(s), value);
74 }
75
76 bool set_contains(Set *s, void *value) {
77 return hashmap_contains(MAKE_HASHMAP(s), value);
78 }
79
80 void *set_remove(Set *s, void *value) {
81 return hashmap_remove(MAKE_HASHMAP(s), value);
82 }
83
84 int set_remove_and_put(Set *s, void *old_value, void *new_value) {
85 return hashmap_remove_and_put(MAKE_HASHMAP(s), old_value, new_value, new_value);
86 }
87
88 unsigned set_size(Set *s) {
89 return hashmap_size(MAKE_HASHMAP(s));
90 }
91
92 bool set_isempty(Set *s) {
93 return hashmap_isempty(MAKE_HASHMAP(s));
94 }
95
96 void *set_iterate(Set *s, Iterator *i) {
97 return hashmap_iterate(MAKE_HASHMAP(s), i, NULL);
98 }
99
100 void *set_iterate_backwards(Set *s, Iterator *i) {
101 return hashmap_iterate_backwards(MAKE_HASHMAP(s), i, NULL);
102 }
103
104 void *set_iterate_skip(Set *s, void *value, Iterator *i) {
105 return hashmap_iterate_skip(MAKE_HASHMAP(s), value, i);
106 }
107
108 void *set_steal_first(Set *s) {
109 return hashmap_steal_first(MAKE_HASHMAP(s));
110 }
111
112 void* set_first(Set *s) {
113 return hashmap_first(MAKE_HASHMAP(s));
114 }
115
116 void* set_last(Set *s) {
117 return hashmap_last(MAKE_HASHMAP(s));
118 }
119
120 int set_merge(Set *s, Set *other) {
121 return hashmap_merge(MAKE_HASHMAP(s), MAKE_HASHMAP(other));
122 }
123
124 void set_move(Set *s, Set *other) {
125 return hashmap_move(MAKE_HASHMAP(s), MAKE_HASHMAP(other));
126 }
127
128 int set_move_one(Set *s, Set *other, void *value) {
129 return hashmap_move_one(MAKE_HASHMAP(s), MAKE_HASHMAP(other), value);
130 }
131
132 Set* set_copy(Set *s) {
133 return MAKE_SET(hashmap_copy(MAKE_HASHMAP(s)));
134 }
135
136 void set_clear(Set *s) {
137 hashmap_clear(MAKE_HASHMAP(s));
138 }
139
140 void set_clear_free(Set *s) {
141 hashmap_clear_free(MAKE_HASHMAP(s));
142 }
143
144 char **set_get_strv(Set *s) {
145 return hashmap_get_strv(MAKE_HASHMAP(s));
146 }