summaryrefslogtreecommitdiff
path: root/libihash/ihash.c
diff options
context:
space:
mode:
authorJustus Winter <4winter@informatik.uni-hamburg.de>2014-05-15 13:53:16 +0200
committerJustus Winter <4winter@informatik.uni-hamburg.de>2014-05-22 07:52:42 +0200
commit689b3f9b8fb68218515c05b3b7b13ff4e21c6c76 (patch)
tree0a86e54fe7121b1cb4f18af92d284ab489b6d7b7 /libihash/ihash.c
parent198ab077a14511e0af5f430f89ff2b1abacb1fd6 (diff)
libihash: add hurd_ihash_get_load
* libihash/ihash.c (hurd_ihash_add): Move the code computing the load factor of the hash table... * libihash/ihash.h (hurd_ihash_get_load): ... here, together with the comment describing the method and the rationale for chosing binary percent.
Diffstat (limited to 'libihash/ihash.c')
-rw-r--r--libihash/ihash.c20
1 files changed, 2 insertions, 18 deletions
diff --git a/libihash/ihash.c b/libihash/ihash.c
index f20ba613..4d9cc18e 100644
--- a/libihash/ihash.c
+++ b/libihash/ihash.c
@@ -273,24 +273,8 @@ hurd_ihash_add (hurd_ihash_t ht, hurd_ihash_key_t key, hurd_ihash_value_t item)
if (ht->size)
{
- /* Only fill the hash table up to its maximum load factor given
- as "binary percent", where 128b% corresponds to 100%. As the
- size is always a power of two, and 128 is also, the quotient
- of both is also a power of two. Therefore, we can use bit
- shifts to scale the number of items.
-
- load = nr_items * 128 / size
- = nr_items * 2^{log2 (128) - log2 (size)}
- = nr_items >> (log2 (size) - log2 (128))
- -- if size >= 128
- = nr_items << (log2 (128) - log2 (size))
- -- otherwise
- */
- int d = __builtin_ctzl (ht->size) - 7;
- unsigned int load = d >= 0
- ? ht->nr_items >> d
- : ht->nr_items << -d;
- if (load <= ht->max_load)
+ /* Only fill the hash table up to its maximum load factor. */
+ if (hurd_ihash_get_load (ht) <= ht->max_load)
if (add_one (ht, key, item))
return 0;
}