From 29c6c3b95be62fdda06f6dbff658515ae0a94b3f Mon Sep 17 00:00:00 2001 From: Cedric Bail Date: Tue, 17 Oct 2017 16:09:57 -0700 Subject: [PATCH] eina: refactor eina hash computation of key length and hash value. --- src/lib/eina/eina_hash.c | 44 +++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/src/lib/eina/eina_hash.c b/src/lib/eina/eina_hash.c index b2d338d832..e4d8662eb7 100644 --- a/src/lib/eina/eina_hash.c +++ b/src/lib/eina/eina_hash.c @@ -467,6 +467,13 @@ _eina_hash_del_by_key_hash(Eina_Hash *hash, return _eina_hash_del_by_hash_el(hash, hash_element, hash_head, key_hash); } +static void +_eina_hash_compute(const Eina_Hash *hash, const void *key, int *key_length, int *key_hash) +{ + *key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; + *key_hash = hash->key_hash_cb(key, *key_length); +} + static Eina_Bool _eina_hash_del_by_key(Eina_Hash *hash, const void *key, const void *data) { @@ -479,8 +486,7 @@ _eina_hash_del_by_key(Eina_Hash *hash, const void *key, const void *data) if (!hash->buckets) return EINA_FALSE; - key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; - key_hash = hash->key_hash_cb(key, key_length); + _eina_hash_compute(hash, key, &key_length, &key_hash); return _eina_hash_del_by_key_hash(hash, key, key_length, key_hash, data); } @@ -921,7 +927,7 @@ eina_hash_direct_add_by_hash(Eina_Hash *hash, EAPI Eina_Bool eina_hash_add(Eina_Hash *hash, const void *key, const void *data) { - unsigned int key_length; + int key_length; int key_hash; EINA_MAGIC_CHECK_HASH(hash); @@ -930,8 +936,7 @@ eina_hash_add(Eina_Hash *hash, const void *key, const void *data) EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE); - key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; - key_hash = hash->key_hash_cb(key, key_length); + _eina_hash_compute(hash, key, &key_length, &key_hash); return eina_hash_add_alloc_by_hash(hash, key, key_length, key_length, key_hash, data); } @@ -948,8 +953,7 @@ eina_hash_direct_add(Eina_Hash *hash, const void *key, const void *data) EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE); EINA_MAGIC_CHECK_HASH(hash); - key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; - key_hash = hash->key_hash_cb(key, key_length); + _eina_hash_compute(hash, key, &key_length, &key_hash); return eina_hash_add_alloc_by_hash(hash, key, key_length, 0, key_hash, data); } @@ -1062,7 +1066,7 @@ EAPI void * eina_hash_find(const Eina_Hash *hash, const void *key) { int key_length; - int hash_num; + int key_hash; if (!hash) return NULL; @@ -1071,10 +1075,9 @@ eina_hash_find(const Eina_Hash *hash, const void *key) EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL); EINA_MAGIC_CHECK_HASH(hash); - key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; - hash_num = hash->key_hash_cb(key, key_length); + _eina_hash_compute(hash, key, &key_length, &key_hash); - return eina_hash_find_by_hash(hash, key, key_length, hash_num); + return eina_hash_find_by_hash(hash, key, key_length, key_hash); } EAPI void * @@ -1122,8 +1125,7 @@ eina_hash_set(Eina_Hash *hash, const void *key, const void *data) EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL); EINA_MAGIC_CHECK_HASH(hash); - key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; - key_hash = hash->key_hash_cb(key, key_length); + _eina_hash_compute(hash, key, &key_length, &key_hash); tuple.key = key; tuple.key_length = key_length; @@ -1166,7 +1168,7 @@ EAPI void * eina_hash_modify(Eina_Hash *hash, const void *key, const void *data) { int key_length; - int hash_num; + int key_hash; EINA_SAFETY_ON_NULL_RETURN_VAL(hash, NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, NULL); @@ -1174,10 +1176,9 @@ eina_hash_modify(Eina_Hash *hash, const void *key, const void *data) EINA_SAFETY_ON_NULL_RETURN_VAL(data, NULL); EINA_MAGIC_CHECK_HASH(hash); - key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; - hash_num = hash->key_hash_cb(key, key_length); + _eina_hash_compute(hash, key, &key_length, &key_hash); - return eina_hash_modify_by_hash(hash, key, key_length, hash_num, data); + return eina_hash_modify_by_hash(hash, key, key_length, key_hash, data); } EAPI Eina_Bool @@ -1386,8 +1387,7 @@ eina_hash_list_append(Eina_Hash *hash, const void *key, const void *data) EINA_SAFETY_ON_NULL_RETURN(data); EINA_MAGIC_CHECK_HASH(hash); - key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; - key_hash = hash->key_hash_cb(key, key_length); + _eina_hash_compute(hash, key, &key_length, &key_hash); tuple.key = key; tuple.key_length = key_length; @@ -1420,8 +1420,7 @@ eina_hash_list_prepend(Eina_Hash *hash, const void *key, const void *data) EINA_SAFETY_ON_NULL_RETURN(data); EINA_MAGIC_CHECK_HASH(hash); - key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; - key_hash = hash->key_hash_cb(key, key_length); + _eina_hash_compute(hash, key, &key_length, &key_hash); tuple.key = key; tuple.key_length = key_length; @@ -1454,8 +1453,7 @@ eina_hash_list_remove(Eina_Hash *hash, const void *key, const void *data) EINA_SAFETY_ON_NULL_RETURN(data); EINA_MAGIC_CHECK_HASH(hash); - key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; - key_hash = hash->key_hash_cb(key, key_length); + _eina_hash_compute(hash, key, &key_length, &key_hash); tuple.key = key; tuple.key_length = key_length;