eina: refactor eina hash computation of key length and hash value.

This commit is contained in:
Cedric Bail 2017-10-17 16:09:57 -07:00
parent 28ce98c411
commit 29c6c3b95b
1 changed files with 21 additions and 23 deletions

View File

@ -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); 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 static Eina_Bool
_eina_hash_del_by_key(Eina_Hash *hash, const void *key, const void *data) _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) if (!hash->buckets)
return EINA_FALSE; return EINA_FALSE;
key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; _eina_hash_compute(hash, key, &key_length, &key_hash);
key_hash = hash->key_hash_cb(key, key_length);
return _eina_hash_del_by_key_hash(hash, key, key_length, key_hash, data); 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 EAPI Eina_Bool
eina_hash_add(Eina_Hash *hash, const void *key, const void *data) eina_hash_add(Eina_Hash *hash, const void *key, const void *data)
{ {
unsigned int key_length; int key_length;
int key_hash; int key_hash;
EINA_MAGIC_CHECK_HASH(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(key, EINA_FALSE);
EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE);
key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; _eina_hash_compute(hash, key, &key_length, &key_hash);
key_hash = hash->key_hash_cb(key, key_length);
return eina_hash_add_alloc_by_hash(hash, key, key_length, key_length, key_hash, data); 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_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE);
EINA_MAGIC_CHECK_HASH(hash); EINA_MAGIC_CHECK_HASH(hash);
key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; _eina_hash_compute(hash, key, &key_length, &key_hash);
key_hash = hash->key_hash_cb(key, key_length);
return eina_hash_add_alloc_by_hash(hash, key, key_length, 0, key_hash, data); 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) eina_hash_find(const Eina_Hash *hash, const void *key)
{ {
int key_length; int key_length;
int hash_num; int key_hash;
if (!hash) if (!hash)
return NULL; 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_SAFETY_ON_NULL_RETURN_VAL(key, NULL);
EINA_MAGIC_CHECK_HASH(hash); EINA_MAGIC_CHECK_HASH(hash);
key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; _eina_hash_compute(hash, key, &key_length, &key_hash);
hash_num = hash->key_hash_cb(key, key_length);
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 * 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_SAFETY_ON_NULL_RETURN_VAL(key, NULL);
EINA_MAGIC_CHECK_HASH(hash); EINA_MAGIC_CHECK_HASH(hash);
key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; _eina_hash_compute(hash, key, &key_length, &key_hash);
key_hash = hash->key_hash_cb(key, key_length);
tuple.key = key; tuple.key = key;
tuple.key_length = key_length; tuple.key_length = key_length;
@ -1166,7 +1168,7 @@ EAPI void *
eina_hash_modify(Eina_Hash *hash, const void *key, const void *data) eina_hash_modify(Eina_Hash *hash, const void *key, const void *data)
{ {
int key_length; int key_length;
int hash_num; int key_hash;
EINA_SAFETY_ON_NULL_RETURN_VAL(hash, NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(hash, NULL);
EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, 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_SAFETY_ON_NULL_RETURN_VAL(data, NULL);
EINA_MAGIC_CHECK_HASH(hash); EINA_MAGIC_CHECK_HASH(hash);
key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; _eina_hash_compute(hash, key, &key_length, &key_hash);
hash_num = hash->key_hash_cb(key, key_length);
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 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_SAFETY_ON_NULL_RETURN(data);
EINA_MAGIC_CHECK_HASH(hash); EINA_MAGIC_CHECK_HASH(hash);
key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; _eina_hash_compute(hash, key, &key_length, &key_hash);
key_hash = hash->key_hash_cb(key, key_length);
tuple.key = key; tuple.key = key;
tuple.key_length = key_length; 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_SAFETY_ON_NULL_RETURN(data);
EINA_MAGIC_CHECK_HASH(hash); EINA_MAGIC_CHECK_HASH(hash);
key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; _eina_hash_compute(hash, key, &key_length, &key_hash);
key_hash = hash->key_hash_cb(key, key_length);
tuple.key = key; tuple.key = key;
tuple.key_length = key_length; 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_SAFETY_ON_NULL_RETURN(data);
EINA_MAGIC_CHECK_HASH(hash); EINA_MAGIC_CHECK_HASH(hash);
key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; _eina_hash_compute(hash, key, &key_length, &key_hash);
key_hash = hash->key_hash_cb(key, key_length);
tuple.key = key; tuple.key = key;
tuple.key_length = key_length; tuple.key_length = key_length;