From 85ff32caebeaaade7bb98d09e321a965cad14e07 Mon Sep 17 00:00:00 2001 From: hniksic Date: Fri, 7 Nov 2003 19:42:58 -0800 Subject: [PATCH] [svn] Name the source of the integer hash function. --- src/hash.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/hash.c b/src/hash.c index 2c8d1351..49979c75 100644 --- a/src/hash.c +++ b/src/hash.c @@ -175,9 +175,7 @@ struct hash_table { for (; NON_EMPTY (mp); mp = NEXT_MAPPING (mp, mappings, size)) /* Return the position of KEY in hash table SIZE large, hash function - being HASHFUN. #### Some implementations multiply HASHFUN's output - with the table's "golden ratio" to get better spreading of keys. - I'm not sure if that is necessary with our hash functions. */ + being HASHFUN. */ #define HASH_POSITION(key, hashfun, size) ((hashfun) (key) % size) /* Find a prime near, but greather than or equal to SIZE. Of course, @@ -639,9 +637,14 @@ make_nocase_string_hash_table (int items) return hash_table_new (items, string_hash_nocase, string_cmp_nocase); } -/* Hashing of pointers. Used for hash tables that are keyed by - pointer identity. (Common Lisp calls them EQ hash tables, and Java - calls them IdentityHashMaps.) */ +/* Hashing of numeric values, such as pointers and integers. Used for + hash tables that are keyed by pointer identity. (Common Lisp calls + them EQ hash tables, and Java calls them IdentityHashMaps.) + + This implementation is the Robert Jenkins' 32 bit Mix Function, + with a simple adaptation for 64-bit values. It offers excellent + spreading of values and doesn't need to know the hash table size to + work (unlike the very popular Knuth's multiplication hash). */ static unsigned long ptrhash (const void *ptr) -- 2.39.2