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.
This commit is contained in:
Michal Schmidt
2014-09-15 16:08:50 +02:00
parent f44541bc93
commit d5099efc47
82 changed files with 278 additions and 226 deletions
+1 -1
View File
@@ -206,7 +206,7 @@ static int link_new(Manager *manager, sd_rtnl_message *message, Link **ret) {
if (r < 0)
return -ENOMEM;
r = hashmap_ensure_allocated(&manager->links, NULL, NULL);
r = hashmap_ensure_allocated(&manager->links, NULL);
if (r < 0)
return r;
+4 -4
View File
@@ -115,7 +115,7 @@ int manager_new(Manager **ret) {
return -ENOMEM;
}
m->netdevs = hashmap_new(string_hash_func, string_compare_func);
m->netdevs = hashmap_new(&string_hash_ops);
if (!m->netdevs)
return -ENOMEM;
@@ -485,15 +485,15 @@ int manager_save(Manager *m) {
assert(m->state_file);
/* We add all NTP and DNS server to a set, to filter out duplicates */
dns = set_new(string_hash_func, string_compare_func);
dns = set_new(&string_hash_ops);
if (!dns)
return -ENOMEM;
ntp = set_new(string_hash_func, string_compare_func);
ntp = set_new(&string_hash_ops);
if (!ntp)
return -ENOMEM;
domains = set_new(string_hash_func, string_compare_func);
domains = set_new(&string_hash_ops);
if (!domains)
return -ENOMEM;
+3 -3
View File
@@ -63,15 +63,15 @@ static int network_load_one(Manager *manager, const char *filename) {
LIST_HEAD_INIT(network->static_addresses);
LIST_HEAD_INIT(network->static_routes);
network->stacked_netdevs = hashmap_new(string_hash_func, string_compare_func);
network->stacked_netdevs = hashmap_new(&string_hash_ops);
if (!network->stacked_netdevs)
return log_oom();
network->addresses_by_section = hashmap_new(NULL, NULL);
network->addresses_by_section = hashmap_new(NULL);
if (!network->addresses_by_section)
return log_oom();
network->routes_by_section = hashmap_new(NULL, NULL);
network->routes_by_section = hashmap_new(NULL);
if (!network->routes_by_section)
return log_oom();
+2 -3
View File
@@ -34,12 +34,11 @@ int link_new(Manager *m, Link **ret, int ifindex, const char *ifname) {
assert(m);
assert(ifindex > 0);
r = hashmap_ensure_allocated(&m->links, NULL, NULL);
r = hashmap_ensure_allocated(&m->links, NULL);
if (r < 0)
return r;
r = hashmap_ensure_allocated(&m->links_by_name,
string_hash_func, string_compare_func);
r = hashmap_ensure_allocated(&m->links_by_name, &string_hash_ops);
if (r < 0)
return r;