]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/shared/set.h
relicense to LGPLv2.1 (with exceptions)
[thirdparty/systemd.git] / src / shared / set.h
CommitLineData
03467c88 1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
60918275
LP
2
3#ifndef foosethfoo
4#define foosethfoo
5
a7334b09
LP
6/***
7 This file is part of systemd.
8
9 Copyright 2010 Lennart Poettering
10
11 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
12 under the terms of the GNU Lesser General Public License as published by
13 the Free Software Foundation; either version 2.1 of the License, or
a7334b09
LP
14 (at your option) any later version.
15
16 systemd is distributed in the hope that it will be useful, but
17 WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5430f7f2 19 Lesser General Public License for more details.
a7334b09 20
5430f7f2 21 You should have received a copy of the GNU Lesser General Public License
a7334b09
LP
22 along with systemd; If not, see <http://www.gnu.org/licenses/>.
23***/
24
60918275
LP
25/* Pretty straightforward set implementation. Internally based on the
26 * hashmap. That means that as a minor optimization a NULL set
27 * object will be treated as empty set for all read
28 * operations. That way it is not necessary to instantiate an object
29 * for each set use. */
30
31#include "hashmap.h"
32
33typedef struct Set Set;
34
35Set *set_new(hash_func_t hash_func, compare_func_t compare_func);
91cdde8a 36void set_free(Set* s);
53ec43c6 37void set_free_free(Set *s);
034c6ed7
LP
38Set* set_copy(Set *s);
39int set_ensure_allocated(Set **s, hash_func_t hash_func, compare_func_t compare_func);
60918275
LP
40
41int set_put(Set *s, void *value);
f00b3eda 42int set_replace(Set *s, void *value);
60918275
LP
43void *set_get(Set *s, void *value);
44void *set_remove(Set *s, void *value);
101d8e63 45int set_remove_and_put(Set *s, void *old_value, void *new_value);
60918275 46
91cdde8a 47int set_merge(Set *s, Set *other);
101d8e63
LP
48void set_move(Set *s, Set *other);
49int set_move_one(Set *s, Set *other, void *value);
91cdde8a 50
60918275
LP
51unsigned set_size(Set *s);
52bool set_isempty(Set *s);
53
034c6ed7
LP
54void *set_iterate(Set *s, Iterator *i);
55void *set_iterate_backwards(Set *s, Iterator *i);
56void *set_iterate_skip(Set *s, void *value, Iterator *i);
60918275 57
11dd41ce 58void set_clear(Set *s);
91cdde8a
LP
59void *set_steal_first(Set *s);
60void* set_first(Set *s);
61void* set_last(Set *s);
60918275 62
034c6ed7
LP
63#define SET_FOREACH(e, s, i) \
64 for ((i) = ITERATOR_FIRST, (e) = set_iterate((s), &(i)); (e); (e) = set_iterate((s), &(i)))
60918275 65
034c6ed7
LP
66#define SET_FOREACH_BACKWARDS(e, s, i) \
67 for ((i) = ITERATOR_LAST, (e) = set_iterate_backwards((s), &(i)); (e); (e) = set_iterate_backwards((s), &(i)))
60918275
LP
68
69#endif