diff options
author | Alan Mishchenko <alanmi@berkeley.edu> | 2017-04-08 18:37:32 -0700 |
---|---|---|
committer | Alan Mishchenko <alanmi@berkeley.edu> | 2017-04-08 18:37:32 -0700 |
commit | fe3d334151dd3b81dca4beaa8635d89d3f8b2d71 (patch) | |
tree | 5c50903e80559e076f2fdc0144bc6ba9af83fadc /src/misc | |
parent | dd51c2993458d4c76442bbb5bf1ca00b5d207c35 (diff) | |
download | abc-fe3d334151dd3b81dca4beaa8635d89d3f8b2d71.tar.gz abc-fe3d334151dd3b81dca4beaa8635d89d3f8b2d71.tar.bz2 abc-fe3d334151dd3b81dca4beaa8635d89d3f8b2d71.zip |
Experiments with hashing.
Diffstat (limited to 'src/misc')
-rw-r--r-- | src/misc/vec/vecHsh.h | 19 |
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; |