in webbeans-impl/src/main/java/org/apache/webbeans/hash/XxHash64.java [61:163]
public static long apply(final ByteBuffer input)
{
int length = input.remaining();
long remaining = length;
long hash;
int off = 0;
if (remaining >= 32)
{
long v1 = PRIME64_1 + PRIME64_2;
long v2 = PRIME64_2;
long v3 = 0;
long v4 = -PRIME64_1;
do
{
v1 += input.getLong(off) * PRIME64_2;
v1 = Long.rotateLeft(v1, 31);
v1 *= PRIME64_1;
v2 += input.getLong(off + 8) * PRIME64_2;
v2 = Long.rotateLeft(v2, 31);
v2 *= PRIME64_1;
v3 += input.getLong(off + 16) * PRIME64_2;
v3 = Long.rotateLeft(v3, 31);
v3 *= PRIME64_1;
v4 += input.getLong(off + 24) * PRIME64_2;
v4 = Long.rotateLeft(v4, 31);
v4 *= PRIME64_1;
off += 32;
remaining -= 32;
}
while (remaining >= 32);
hash = Long.rotateLeft(v1, 1)
+ Long.rotateLeft(v2, 7)
+ Long.rotateLeft(v3, 12)
+ Long.rotateLeft(v4, 18);
v1 *= PRIME64_2;
v1 = Long.rotateLeft(v1, 31);
v1 *= PRIME64_1;
hash ^= v1;
hash = hash * PRIME64_1 + PRIME64_4;
v2 *= PRIME64_2;
v2 = Long.rotateLeft(v2, 31);
v2 *= PRIME64_1;
hash ^= v2;
hash = hash * PRIME64_1 + PRIME64_4;
v3 *= PRIME64_2;
v3 = Long.rotateLeft(v3, 31);
v3 *= PRIME64_1;
hash ^= v3;
hash = hash * PRIME64_1 + PRIME64_4;
v4 *= PRIME64_2;
v4 = Long.rotateLeft(v4, 31);
v4 *= PRIME64_1;
hash ^= v4;
hash = hash * PRIME64_1 + PRIME64_4;
}
else
{
hash = PRIME64_5;
}
hash += length;
while (remaining >= 8)
{
long k1 = input.getLong(off);
k1 *= PRIME64_2;
k1 = Long.rotateLeft(k1, 31);
k1 *= PRIME64_1;
hash ^= k1;
hash = Long.rotateLeft(hash, 27) * PRIME64_1 + PRIME64_4;
off += 8;
remaining -= 8;
}
if (remaining >= 4)
{
hash ^= (input.getInt(off) & 0xFFFFFFFFL) * PRIME64_1;
hash = Long.rotateLeft(hash, 23) * PRIME64_2 + PRIME64_3;
off += 4;
remaining -= 4;
}
while (remaining != 0)
{
hash ^= (input.get(off) & 0xFF) * PRIME64_5;
hash = Long.rotateLeft(hash, 11) * PRIME64_1;
--remaining;
++off;
}
return finalize(hash);
}