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