39 lines
905 B
C#
39 lines
905 B
C#
namespace NoiseTools
|
|
{
|
|
public struct XXHash
|
|
{
|
|
#region Private Members
|
|
|
|
const uint PRIME32_1 = 2654435761U;
|
|
const uint PRIME32_2 = 2246822519U;
|
|
const uint PRIME32_3 = 3266489917U;
|
|
const uint PRIME32_4 = 668265263U;
|
|
const uint PRIME32_5 = 374761393U;
|
|
|
|
static uint rotl32(uint x, int r)
|
|
{
|
|
return (x << r) | (x >> 32 - r);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Static Functions
|
|
|
|
public static uint GetHash(int data, int seed)
|
|
{
|
|
uint h32 = (uint)seed + PRIME32_5;
|
|
h32 += 4U;
|
|
h32 += (uint)data * PRIME32_3;
|
|
h32 = rotl32(h32, 17) * PRIME32_4;
|
|
h32 ^= h32 >> 15;
|
|
h32 *= PRIME32_2;
|
|
h32 ^= h32 >> 13;
|
|
h32 *= PRIME32_3;
|
|
h32 ^= h32 >> 16;
|
|
return h32;
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|