Changeset - r22864:621b56e45870
[Not reviewed]
master
0 1 0
PeterN - 6 years ago 2018-05-19 21:04:25
peter@fuzzle.org
Change [#6689]: Tweak HashTable hash calculation to reduce collisions. (kernigh2) (#6786)
1 file changed with 4 insertions and 6 deletions:
0 comments (0 inline, 0 general)
src/misc/hashtable.hpp
Show inline comments
 
@@ -161,12 +161,10 @@ protected:
 
	/** static helper - return hash for the given key modulo number of slots */
 
	inline static int CalcHash(const Tkey &key)
 
	{
 
		int32 hash = key.CalcHash();
 
		if ((8 * Thash_bits) < 32) hash ^= hash >> (min(8 * Thash_bits, 31));
 
		if ((4 * Thash_bits) < 32) hash ^= hash >> (min(4 * Thash_bits, 31));
 
		if ((2 * Thash_bits) < 32) hash ^= hash >> (min(2 * Thash_bits, 31));
 
		if ((1 * Thash_bits) < 32) hash ^= hash >> (min(1 * Thash_bits, 31));
 
		hash &= (1 << Thash_bits) - 1;
 
		uint32 hash = key.CalcHash();
 
		hash -= (hash >> 17);          // hash * 131071 / 131072
 
		hash -= (hash >> 5);           //   * 31 / 32
 
		hash &= (1 << Thash_bits) - 1; //   modulo slots
 
		return hash;
 
	}
 

	
0 comments (0 inline, 0 general)