diff options
author | Justus Winter <4winter@informatik.uni-hamburg.de> | 2014-05-15 13:53:16 +0200 |
---|---|---|
committer | Justus Winter <4winter@informatik.uni-hamburg.de> | 2014-05-22 07:52:42 +0200 |
commit | 689b3f9b8fb68218515c05b3b7b13ff4e21c6c76 (patch) | |
tree | 0a86e54fe7121b1cb4f18af92d284ab489b6d7b7 /libihash/ihash.c | |
parent | 198ab077a14511e0af5f430f89ff2b1abacb1fd6 (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.c | 20 |
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; } |