From d5099efc47d4e6ac60816b5381a5f607ab03f06e Mon Sep 17 00:00:00 2001 From: Michal Schmidt Date: Wed, 13 Aug 2014 01:00:18 +0200 Subject: hashmap: introduce hash_ops to make struct Hashmap smaller It is redundant to store 'hash' and 'compare' function pointers in struct Hashmap separately. The functions always comprise a pair. Store a single pointer to struct hash_ops instead. systemd keeps hundreds of hashmaps, so this saves a little bit of memory. --- src/libsystemd/sd-bus/bus-objects.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'src/libsystemd/sd-bus/bus-objects.c') diff --git a/src/libsystemd/sd-bus/bus-objects.c b/src/libsystemd/sd-bus/bus-objects.c index 3a2de6520e..81c840f129 100644 --- a/src/libsystemd/sd-bus/bus-objects.c +++ b/src/libsystemd/sd-bus/bus-objects.c @@ -225,7 +225,7 @@ static int get_child_nodes( assert(n); assert(_s); - s = set_new(string_hash_func, string_compare_func); + s = set_new(&string_hash_ops); if (!s) return -ENOMEM; @@ -1420,7 +1420,7 @@ static struct node *bus_node_allocate(sd_bus *bus, const char *path) { if (n) return n; - r = hashmap_ensure_allocated(&bus->nodes, string_hash_func, string_compare_func); + r = hashmap_ensure_allocated(&bus->nodes, &string_hash_ops); if (r < 0) return NULL; @@ -1590,6 +1590,11 @@ static int vtable_member_compare_func(const void *a, const void *b) { return strcmp(x->member, y->member); } +static const struct hash_ops vtable_member_hash_ops = { + .hash = vtable_member_hash_func, + .compare = vtable_member_compare_func +}; + static int add_object_vtable_internal( sd_bus *bus, sd_bus_slot **slot, @@ -1618,11 +1623,11 @@ static int add_object_vtable_internal( !streq(interface, "org.freedesktop.DBus.Peer") && !streq(interface, "org.freedesktop.DBus.ObjectManager"), -EINVAL); - r = hashmap_ensure_allocated(&bus->vtable_methods, vtable_member_hash_func, vtable_member_compare_func); + r = hashmap_ensure_allocated(&bus->vtable_methods, &vtable_member_hash_ops); if (r < 0) return r; - r = hashmap_ensure_allocated(&bus->vtable_properties, vtable_member_hash_func, vtable_member_compare_func); + r = hashmap_ensure_allocated(&bus->vtable_properties, &vtable_member_hash_ops); if (r < 0) return r; -- cgit v1.2.3-54-g00ecf