Mercurial > hg > xemacs-beta
diff src/hash.c @ 442:abe6d1db359e r21-2-36
Import from CVS: tag r21-2-36
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:35:02 +0200 |
parents | 3ecd8885ac67 |
children | b39c14581166 |
line wrap: on
line diff
--- a/src/hash.c Mon Aug 13 11:33:40 2007 +0200 +++ b/src/hash.c Mon Aug 13 11:35:02 2007 +0200 @@ -34,10 +34,10 @@ static void rehash (hentry *harray, struct hash_table *ht, hash_size_t size); unsigned long -memory_hash (CONST void *xv, size_t size) +memory_hash (const void *xv, size_t size) { unsigned int h = 0; - unsigned CONST char *x = (unsigned CONST char *) xv; + unsigned const char *x = (unsigned const char *) xv; if (!x) return 0; @@ -52,6 +52,25 @@ return h; } +unsigned long +string_hash (const char *xv) +{ + unsigned int h = 0; + unsigned const char *x = (unsigned const char *) xv; + + if (!x) return 0; + + while (*x) + { + unsigned int g; + h = (h << 4) + *x++; + if ((g = h & 0xf0000000) != 0) + h = (h ^ (g >> 24)) ^ g; + } + + return h; +} + /* Return a suitable size for a hash table, with at least SIZE slots. */ static size_t hash_table_size (size_t requested_size) @@ -59,7 +78,7 @@ /* Return some prime near, but greater than or equal to, SIZE. Decades from the time of writing, someone will have a system large enough that the list below will be too short... */ - static CONST size_t primes [] = + static const size_t primes [] = { 19, 29, 41, 59, 79, 107, 149, 197, 263, 347, 457, 599, 787, 1031, 1361, 1777, 2333, 3037, 3967, 5167, 6719, 8737, 11369, 14783, @@ -85,8 +104,8 @@ return primes [high]; } -CONST void * -gethash (CONST void *key, struct hash_table *hash_table, CONST void **ret_value) +const void * +gethash (const void *key, struct hash_table *hash_table, const void **ret_value) { if (!key) { @@ -104,7 +123,7 @@ (unsigned long) key; unsigned int hcode = hcode_initial % size; hentry *e = &harray [hcode]; - CONST void *e_key = e->key; + const void *e_key = e->key; if (e_key ? KEYS_DIFFER_P (e_key, key, test_function) : @@ -188,7 +207,7 @@ } void -puthash (CONST void *key, void *contents, struct hash_table *hash_table) +puthash (const void *key, void *contents, struct hash_table *hash_table) { if (!key) { @@ -207,8 +226,8 @@ unsigned int hcode = hcode_initial % size; size_t h2 = size - 2; unsigned int incr = 1 + (hcode_initial % h2); - CONST void *e_key = harray [hcode].key; - CONST void *oldcontents; + const void *e_key = harray [hcode].key; + const void *oldcontents; if (e_key && KEYS_DIFFER_P (e_key, key, test_function)) { @@ -269,7 +288,7 @@ } void -remhash (CONST void *key, struct hash_table *hash_table) +remhash (const void *key, struct hash_table *hash_table) { if (!key) { @@ -287,7 +306,7 @@ ((unsigned long) key); unsigned int hcode = hcode_initial % size; hentry *e = &harray [hcode]; - CONST void *e_key = e->key; + const void *e_key = e->key; if (e_key ? KEYS_DIFFER_P (e_key, key, test_function) :