1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
8 typedef struct OrderedSet OrderedSet
;
10 static inline OrderedSet
* _ordered_set_new(const struct hash_ops
*ops HASHMAP_DEBUG_PARAMS
) {
11 return (OrderedSet
*) _ordered_hashmap_new(ops HASHMAP_DEBUG_PASS_ARGS
);
13 #define ordered_set_new(ops) _ordered_set_new(ops HASHMAP_DEBUG_SRC_ARGS)
15 int _ordered_set_ensure_allocated(OrderedSet
**s
, const struct hash_ops
*ops HASHMAP_DEBUG_PARAMS
);
16 #define ordered_set_ensure_allocated(s, ops) _ordered_set_ensure_allocated(s, ops HASHMAP_DEBUG_SRC_ARGS)
18 int _ordered_set_ensure_put(OrderedSet
**s
, const struct hash_ops
*ops
, void *p HASHMAP_DEBUG_PARAMS
);
19 #define ordered_set_ensure_put(s, hash_ops, key) _ordered_set_ensure_put(s, hash_ops, key HASHMAP_DEBUG_SRC_ARGS)
21 static inline OrderedSet
* ordered_set_free(OrderedSet
*s
) {
22 return (OrderedSet
*) ordered_hashmap_free((OrderedHashmap
*) s
);
25 static inline OrderedSet
* ordered_set_free_free(OrderedSet
*s
) {
26 return (OrderedSet
*) ordered_hashmap_free_free((OrderedHashmap
*) s
);
29 static inline int ordered_set_contains(OrderedSet
*s
, const void *p
) {
30 return ordered_hashmap_contains((OrderedHashmap
*) s
, p
);
33 static inline int ordered_set_put(OrderedSet
*s
, void *p
) {
34 return ordered_hashmap_put((OrderedHashmap
*) s
, p
, p
);
37 static inline unsigned ordered_set_size(OrderedSet
*s
) {
38 return ordered_hashmap_size((OrderedHashmap
*) s
);
41 static inline bool ordered_set_isempty(OrderedSet
*s
) {
42 return ordered_hashmap_isempty((OrderedHashmap
*) s
);
45 static inline bool ordered_set_iterate(OrderedSet
*s
, Iterator
*i
, void **value
) {
46 return ordered_hashmap_iterate((OrderedHashmap
*) s
, i
, value
, NULL
);
49 static inline void* ordered_set_remove(OrderedSet
*s
, void *p
) {
50 return ordered_hashmap_remove((OrderedHashmap
*) s
, p
);
53 static inline void* ordered_set_first(OrderedSet
*s
) {
54 return ordered_hashmap_first((OrderedHashmap
*) s
);
57 static inline void* ordered_set_steal_first(OrderedSet
*s
) {
58 return ordered_hashmap_steal_first((OrderedHashmap
*) s
);
61 static inline char** ordered_set_get_strv(OrderedSet
*s
) {
62 return _hashmap_get_strv(HASHMAP_BASE((OrderedHashmap
*) s
));
65 int ordered_set_consume(OrderedSet
*s
, void *p
);
66 int _ordered_set_put_strdup(OrderedSet
**s
, const char *p HASHMAP_DEBUG_PARAMS
);
67 #define ordered_set_put_strdup(s, p) _ordered_set_put_strdup(s, p HASHMAP_DEBUG_SRC_ARGS)
68 int _ordered_set_put_strdupv(OrderedSet
**s
, char **l HASHMAP_DEBUG_PARAMS
);
69 #define ordered_set_put_strdupv(s, l) _ordered_set_put_strdupv(s, l HASHMAP_DEBUG_SRC_ARGS)
70 int ordered_set_put_string_set(OrderedSet
**s
, OrderedSet
*l
);
71 void ordered_set_print(FILE *f
, const char *field
, OrderedSet
*s
);
73 #define _ORDERED_SET_FOREACH(e, s, i) \
74 for (Iterator i = ITERATOR_FIRST; ordered_set_iterate((s), &i, (void**)&(e)); )
75 #define ORDERED_SET_FOREACH(e, s) \
76 _ORDERED_SET_FOREACH(e, s, UNIQ_T(i, UNIQ))
78 DEFINE_TRIVIAL_CLEANUP_FUNC(OrderedSet
*, ordered_set_free
);
79 DEFINE_TRIVIAL_CLEANUP_FUNC(OrderedSet
*, ordered_set_free_free
);
81 #define _cleanup_ordered_set_free_ _cleanup_(ordered_set_freep)
82 #define _cleanup_ordered_set_free_free_ _cleanup_(ordered_set_free_freep)