chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
terminal/screen: add color converter
[elogind.git]
/
src
/
shared
/
set.c
diff --git
a/src/shared/set.c
b/src/shared/set.c
index c338dc3a44c462176a96dce3c3e189c9c9afa9f4..ed16067bdc3757db55b1f451b55a8049ec9ea93d 100644
(file)
--- a/
src/shared/set.c
+++ b/
src/shared/set.c
@@
-23,14
+23,15
@@
#include "set.h"
#include "hashmap.h"
#include "set.h"
#include "hashmap.h"
+#include "strv.h"
#define MAKE_SET(h) ((Set*) (h))
#define MAKE_HASHMAP(s) ((Hashmap*) (s))
/* For now this is not much more than a wrapper around a hashmap */
#define MAKE_SET(h) ((Set*) (h))
#define MAKE_HASHMAP(s) ((Hashmap*) (s))
/* For now this is not much more than a wrapper around a hashmap */
-Set *set_new(
hash_func_t hash_func, compare_func_t compare_func
) {
- return MAKE_SET(hashmap_new(hash_
func, compare_func
));
+Set *set_new(
const struct hash_ops *hash_ops
) {
+ return MAKE_SET(hashmap_new(hash_
ops
));
}
void set_free(Set* s) {
}
void set_free(Set* s) {
@@
-41,8
+42,8
@@
void set_free_free(Set *s) {
hashmap_free_free(MAKE_HASHMAP(s));
}
hashmap_free_free(MAKE_HASHMAP(s));
}
-int set_ensure_allocated(Set **s,
hash_func_t hash_func, compare_func_t compare_func
) {
- return hashmap_ensure_allocated((Hashmap**) s, hash_
func, compare_func
);
+int set_ensure_allocated(Set **s,
const struct hash_ops *hash_ops
) {
+ return hashmap_ensure_allocated((Hashmap**) s, hash_
ops
);
}
int set_put(Set *s, void *value) {
}
int set_put(Set *s, void *value) {
@@
-50,12
+51,48
@@
int set_put(Set *s, void *value) {
}
int set_consume(Set *s, void *value) {
}
int set_consume(Set *s, void *value) {
- int r = set_put(s, value);
+ int r;
+
+ r = set_put(s, value);
if (r < 0)
free(value);
if (r < 0)
free(value);
+
+ return r;
+}
+
+int set_put_strdup(Set *s, const char *p) {
+ char *c;
+ int r;
+
+ assert(s);
+ assert(p);
+
+ c = strdup(p);
+ if (!c)
+ return -ENOMEM;
+
+ r = set_consume(s, c);
+ if (r == -EEXIST)
+ return 0;
+
return r;
}
return r;
}
+int set_put_strdupv(Set *s, char **l) {
+ int n = 0, r;
+ char **i;
+
+ STRV_FOREACH(i, l) {
+ r = set_put_strdup(s, *i);
+ if (r < 0)
+ return r;
+
+ n += r;
+ }
+
+ return n;
+}
+
int set_replace(Set *s, void *value) {
return hashmap_replace(MAKE_HASHMAP(s), value, value);
}
int set_replace(Set *s, void *value) {
return hashmap_replace(MAKE_HASHMAP(s), value, value);
}
@@
-88,14
+125,6
@@
void *set_iterate(Set *s, Iterator *i) {
return hashmap_iterate(MAKE_HASHMAP(s), i, NULL);
}
return hashmap_iterate(MAKE_HASHMAP(s), i, NULL);
}
-void *set_iterate_backwards(Set *s, Iterator *i) {
- return hashmap_iterate_backwards(MAKE_HASHMAP(s), i, NULL);
-}
-
-void *set_iterate_skip(Set *s, void *value, Iterator *i) {
- return hashmap_iterate_skip(MAKE_HASHMAP(s), value, i);
-}
-
void *set_steal_first(Set *s) {
return hashmap_steal_first(MAKE_HASHMAP(s));
}
void *set_steal_first(Set *s) {
return hashmap_steal_first(MAKE_HASHMAP(s));
}
@@
-104,10
+133,6
@@
void* set_first(Set *s) {
return hashmap_first(MAKE_HASHMAP(s));
}
return hashmap_first(MAKE_HASHMAP(s));
}
-void* set_last(Set *s) {
- return hashmap_last(MAKE_HASHMAP(s));
-}
-
int set_merge(Set *s, Set *other) {
return hashmap_merge(MAKE_HASHMAP(s), MAKE_HASHMAP(other));
}
int set_merge(Set *s, Set *other) {
return hashmap_merge(MAKE_HASHMAP(s), MAKE_HASHMAP(other));
}