Don't compute string length when not really needed.

SVN revision: 36001
This commit is contained in:
Cedric BAIL 2008-09-15 13:38:42 +00:00
parent 1582d52c3c
commit e3e2afca18
2 changed files with 19 additions and 5 deletions

View File

@ -30,11 +30,27 @@ eina_hash_djb2(const char *key, int len)
const unsigned char *ptr;
if (!key) return 0;
for (ptr = (unsigned char *)key; len; ptr++, len--)
hash_num = ((hash_num << 5) + hash_num) ^ *ptr; /* hash * 33 ^ c */
return (int)hash_num;
}
static inline int
eina_hash_djb2_len(const char *key, int *plen)
{
unsigned int hash_num = 5381;
int len = 0;
const unsigned char *ptr;
if (!key) return 0;
for (ptr = (unsigned char *)key; *ptr; ptr++, len++)
hash_num = ((hash_num << 5) + hash_num) ^ *ptr; /* hash * 33 ^ c */
*plen = len + 1;
return (int)hash_num;
}
#endif

View File

@ -179,8 +179,7 @@ eina_stringshare_add(const char *str)
int hash_num, slen, hash;
if (!str) return NULL;
slen = strlen(str) + 1;
hash = eina_hash_djb2(str, slen);
hash = eina_hash_djb2_len(str, &slen);
hash_num = hash & 0xFF;
hash &= 0xFFF;
@ -240,8 +239,7 @@ eina_stringshare_del(const char *str)
int hash_num, slen, hash;
if (!str) return;
slen = strlen(str) + 1;
hash = eina_hash_djb2(str, slen);
hash = eina_hash_djb2_len(str, &slen);
hash_num = hash & 0xFF;
hash &= 0xFFF;