summaryrefslogtreecommitdiffstats
path: root/src/misc/vec
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2017-04-08 18:37:32 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2017-04-08 18:37:32 -0700
commitfe3d334151dd3b81dca4beaa8635d89d3f8b2d71 (patch)
tree5c50903e80559e076f2fdc0144bc6ba9af83fadc /src/misc/vec
parentdd51c2993458d4c76442bbb5bf1ca00b5d207c35 (diff)
downloadabc-fe3d334151dd3b81dca4beaa8635d89d3f8b2d71.tar.gz
abc-fe3d334151dd3b81dca4beaa8635d89d3f8b2d71.tar.bz2
abc-fe3d334151dd3b81dca4beaa8635d89d3f8b2d71.zip
Experiments with hashing.
Diffstat (limited to 'src/misc/vec')
-rw-r--r--src/misc/vec/vecHsh.h19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/misc/vec/vecHsh.h b/src/misc/vec/vecHsh.h
index de9a038a..4f15f6f0 100644
--- a/src/misc/vec/vecHsh.h
+++ b/src/misc/vec/vecHsh.h
@@ -140,7 +140,24 @@ static inline int Hsh_IntManEntryNum( Hsh_IntMan_t * p )
SeeAlso []
***********************************************************************/
-static inline int Hsh_IntManHash( unsigned * pData, int nSize, int nTableSize )
+// https://en.wikipedia.org/wiki/Jenkins_hash_function
+static inline int Hsh_IntManHash( unsigned * pData, int nSize, int nTableSize )
+{
+ int i = 0; unsigned hash = 0;
+ unsigned char * pDataC = (unsigned char *)pData;
+ nSize <<= 2;
+ while ( i != nSize )
+ {
+ hash += pDataC[i++];
+ hash += hash << 10;
+ hash ^= hash >> 6;
+ }
+ hash += hash << 3;
+ hash ^= hash >> 11;
+ hash += hash << 15;
+ return (int)(hash % nTableSize);
+}
+static inline int Hsh_IntManHash2( unsigned * pData, int nSize, int nTableSize )
{
static int s_Primes[7] = { 4177, 5147, 5647, 6343, 7103, 7873, 8147 };
unsigned char * pDataC = (unsigned char *)pData;