Support 64bit address hashing in the CommonHashClass.

The class already supports hashing 64bit values, just break it out to support it in this particular case.
From the 64bit version of the hash, this hash favours values that aren't on the extreme end.
Consdering that hashing is only really used by the class itself it isn't too big of an issue.
This commit is contained in:
Ryan Houdek 2014-07-11 17:16:58 -05:00
parent a6d8b3b847
commit d132e6bce4
1 changed files with 6 additions and 3 deletions

View File

@ -343,14 +343,17 @@ public:
/// This method has been optimized to give typical 32 bit pointers a reasonably
/// wide spread across the integer spectrum.
/// Note:
/// This method is optimized for 32 bit pointers only. 64 bit pointer support
/// has not been implemented, and thus on 64 bit platforms performance could be poor or,
/// worse yet, results may not have a high degree of uniqueness.
/// This method is optimized for 32 bit pointers only.
/// 64 bit pointer support is implemented but not optimized.
/// </remarks>
hash_key_t operator()( const void* addr ) const
{
#ifdef _ARCH_64
return GetCommonHash((u64)addr);
#else
hash_key_t key = (hash_key_t) addr;
return (hash_key_t)((key >> 3) * 2654435761ul);
#endif
}