From fe3d334151dd3b81dca4beaa8635d89d3f8b2d71 Mon Sep 17 00:00:00 2001 From: Alan Mishchenko Date: Sat, 8 Apr 2017 18:37:32 -0700 Subject: Experiments with hashing. --- src/misc/vec/vecHsh.h | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'src/misc/vec/vecHsh.h') 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; -- cgit v1.2.3