X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fhash.c;h=41b9570e0b853c474b338ebe0bd8b731e4852ab9;hb=60d2b57b2fdc60d3a6a151a67f95b88db825084b;hp=8c6a0ea5052ae340106bcdca99d3cd0ee5b356ed;hpb=d3dd71489ab2730d79536ebdc3c56cca82766e9d;p=chise%2Fxemacs-chise.git.1 diff --git a/src/hash.c b/src/hash.c index 8c6a0ea..41b9570 100644 --- a/src/hash.c +++ b/src/hash.c @@ -34,10 +34,10 @@ Boston, MA 02111-1307, USA. */ 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 @@ memory_hash (CONST void *xv, size_t size) 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 @@ hash_table_size (size_t requested_size) /* 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 @@ hash_table_size (size_t requested_size) 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 @@ gethash (CONST void *key, struct hash_table *hash_table, CONST void **ret_value) (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 @@ grow_hash_table (struct hash_table *hash_table, hash_size_t new_size) } 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 @@ puthash (CONST void *key, void *contents, struct hash_table *hash_table) 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 @@ rehash (hentry *harray, struct hash_table *hash_table, hash_size_t size) } 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 @@ remhash (CONST void *key, struct hash_table *hash_table) ((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) :