summaryrefslogtreecommitdiff
path: root/src/shared/set.c
diff options
context:
space:
mode:
authorMichal Schmidt <mschmidt@redhat.com>2014-10-14 23:35:24 +0200
committerMichal Schmidt <mschmidt@redhat.com>2014-10-23 17:38:02 +0200
commite4c691b59db60ef2e6d8e64766d6ae02cd0dd457 (patch)
treef6af93bdc6599e642099d3f9fc3a3b3e4ca2aee1 /src/shared/set.c
parent9700d6980f7c212b10a69399e6430b82a6f45587 (diff)
hashmap: introduce hashmap_reserve()
With the current hashmap implementation that uses chaining, placing a reservation can serve two purposes: - To optimize putting of entries if the number of entries to put is known. The reservation allocates buckets, so later resizing can be avoided. - To avoid having very long bucket chains after using hashmap_move(_one). In an alternative hashmap implementation it will serve an additional purpose: - To guarantee a subsequent hashmap_move(_one) will not fail with -ENOMEM (this never happens in the current implementation).
Diffstat (limited to 'src/shared/set.c')
-rw-r--r--src/shared/set.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/shared/set.c b/src/shared/set.c
index ed16067bdc..1a3465ca8b 100644
--- a/src/shared/set.c
+++ b/src/shared/set.c
@@ -137,6 +137,10 @@ int set_merge(Set *s, Set *other) {
return hashmap_merge(MAKE_HASHMAP(s), MAKE_HASHMAP(other));
}
+int set_reserve(Set *s, unsigned entries_add) {
+ return hashmap_reserve(MAKE_HASHMAP(s), entries_add);
+}
+
void set_move(Set *s, Set *other) {
return hashmap_move(MAKE_HASHMAP(s), MAKE_HASHMAP(other));
}