From 73bcffe0a44667405eec9cf00ead64799cbf41c6 Mon Sep 17 00:00:00 2001 From: cedric Date: Thu, 18 Jun 2009 12:08:52 +0000 Subject: [PATCH] * eina: Improve eina hash manipulation for int. - Faster int key comparison. - Key Length callback could now be NULL and 0 will be assumed. git-svn-id: http://svn.enlightenment.org/svn/e/trunk/eina@41100 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- src/lib/eina_hash.c | 28 +++++++--------------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/src/lib/eina_hash.c b/src/lib/eina_hash.c index 48cb10b..926055d 100644 --- a/src/lib/eina_hash.c +++ b/src/lib/eina_hash.c @@ -420,7 +420,7 @@ _eina_hash_del_by_key(Eina_Hash *hash, const void *key, const void *data) if (!key) return EINA_FALSE; if (!hash->buckets) return EINA_FALSE; - key_length = hash->key_length_cb(key); + key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; key_hash = hash->key_hash_cb(key, key_length); return _eina_hash_del_by_key_hash(hash, key, key_length, key_hash, data); } @@ -449,11 +449,7 @@ static int _eina_int32_key_cmp(const uint32_t *key1, __UNUSED__ int key1_length, const uint32_t *key2, __UNUSED__ int key2_length) { - if (*key1 > *key2) - return 1; - if (*key1 < *key2) - return -1; - return 0; + return *key1 - *key2; } static unsigned int @@ -466,14 +462,9 @@ static int _eina_int64_key_cmp(const uint64_t *key1, __UNUSED__ int key1_length, const uint64_t *key2, __UNUSED__ int key2_length) { - if (*key1 > *key2) - return 1; - if (*key1 < *key2) - return -1; - return 0; + return *key1 - *key2; } - static Eina_Bool _eina_foreach_cb(const Eina_Hash *hash, Eina_Hash_Tuple *data, Eina_Hash_Foreach_Data *fdata) { @@ -704,7 +695,6 @@ eina_hash_new(Eina_Key_Length key_length_cb, Eina_Hash *new; eina_error_set(0); - EINA_SAFETY_ON_NULL_RETURN_VAL(key_length_cb, NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(key_cmp_cb, NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(key_hash_cb, NULL); EINA_SAFETY_ON_TRUE_RETURN_VAL(buckets_power_size < 3, NULL); @@ -941,12 +931,11 @@ eina_hash_add(Eina_Hash *hash, const void *key, const void *data) EINA_MAGIC_CHECK_HASH(hash); EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_length_cb, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE); - key_length = hash->key_length_cb(key); + key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; key_hash = hash->key_hash_cb(key, key_length); return eina_hash_add_by_hash(hash, key, key_length, key_hash, data); @@ -980,12 +969,11 @@ eina_hash_direct_add(Eina_Hash *hash, const void *key, const void *data) EINA_MAGIC_CHECK_HASH(hash); EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_length_cb, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE); - key_length = hash->key_length_cb(key); + key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; key_hash = hash->key_hash_cb(key, key_length); return eina_hash_direct_add_by_hash(hash, key, key_length, key_hash, data); @@ -1167,11 +1155,10 @@ eina_hash_find(const Eina_Hash *hash, const void *key) if (!hash) return NULL; EINA_MAGIC_CHECK_HASH(hash); - EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_length_cb, NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL); - key_length = hash->key_length_cb(key); + key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; hash_num = hash->key_hash_cb(key, key_length); return eina_hash_find_by_hash(hash, key, key_length, hash_num); @@ -1232,12 +1219,11 @@ eina_hash_modify(Eina_Hash *hash, const void *key, const void *data) EINA_MAGIC_CHECK_HASH(hash); EINA_SAFETY_ON_NULL_RETURN_VAL(hash, NULL); - EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_length_cb, NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(data, NULL); - key_length = hash->key_length_cb(key); + key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; hash_num = hash->key_hash_cb(key, key_length); return eina_hash_modify_by_hash(hash, key, key_length, hash_num, data); -- 2.7.4