private static long mixK1(long k1) { k1 *= C1; k1 = Long.rotateLeft(k1, 31); k1 *= C2; return k1; }
private static long mixK2(long k2) { k2 *= C2; k2 = Long.rotateLeft(k2, 33); k2 *= C1; return k2; } }
private void sipRound(int iterations) { for (int i = 0; i < iterations; i++) { v0 += v1; v2 += v3; v1 = Long.rotateLeft(v1, 13); v3 = Long.rotateLeft(v3, 16); v1 ^= v0; v3 ^= v2; v0 = Long.rotateLeft(v0, 32); v2 += v1; v0 += v3; v1 = Long.rotateLeft(v1, 17); v3 = Long.rotateLeft(v3, 21); v1 ^= v2; v3 ^= v0; v2 = Long.rotateLeft(v2, 32); } } }
public static long hash(int value) { // xxhash64 mix return rotateLeft(value * 0xC2B2AE3D27D4EB4FL, 31) * 0x9E3779B185EBCA87L; } }
private static long mixK1(long k1) { k1 *= C1; k1 = Long.rotateLeft(k1, 31); k1 *= C2; return k1; }
private static long mixK2(long k2) { k2 *= C2; k2 = Long.rotateLeft(k2, 33); k2 *= C1; return k2; } }
public static long hash(long value) { // xxhash64 mix return rotateLeft(value * 0xC2B2AE3D27D4EB4FL, 31) * 0x9E3779B185EBCA87L; } }
public static long hash(int value) { // xxhash64 mix return rotateLeft(value * 0xC2B2AE3D27D4EB4FL, 31) * 0x9E3779B185EBCA87L; } }
public static long hash(short value) { // xxhash64 mix return rotateLeft(value * 0xC2B2AE3D27D4EB4FL, 31) * 0x9E3779B185EBCA87L; } }
private static long updateTail(long hash, byte value) { int unsigned = value & 0xFF; long temp = hash ^ (unsigned * PRIME64_5); return rotateLeft(temp, 11) * PRIME64_1; }
public static long hash(byte value) { // xxhash64 mix return rotateLeft(value * 0xC2B2AE3D27D4EB4FL, 31) * 0x9E3779B185EBCA87L; } }
public static long hash(long value) { // xxhash64 mix return rotateLeft(value * 0xC2B2AE3D27D4EB4FL, 31) * 0x9E3779B185EBCA87L; } }
public static long hash(short value) { // xxhash64 mix return rotateLeft(value * 0xC2B2AE3D27D4EB4FL, 31) * 0x9E3779B185EBCA87L; } }
public static long hash(byte value) { // xxhash64 mix return rotateLeft(value * 0xC2B2AE3D27D4EB4FL, 31) * 0x9E3779B185EBCA87L; } }
private static long mix(long current, long value) { return rotateLeft(current + value * PRIME64_2, 31) * PRIME64_1; }
private void bmix64(long k1, long k2) { h1 ^= mixK1(k1); h1 = Long.rotateLeft(h1, 27); h1 += h2; h1 = h1 * 5 + 0x52dce729; h2 ^= mixK2(k2); h2 = Long.rotateLeft(h2, 31); h2 += h1; h2 = h2 * 5 + 0x38495ab5; }
private void bmix64(long k1, long k2) { h1 ^= mixK1(k1); h1 = Long.rotateLeft(h1, 27); h1 += h2; h1 = h1 * 5 + 0x52dce729; h2 ^= mixK2(k2); h2 = Long.rotateLeft(h2, 31); h2 += h1; h2 = h2 * 5 + 0x38495ab5; }
private static long updateTail(long hash, long value) { long temp = hash ^ mix(0, value); return rotateLeft(temp, 27) * PRIME64_1 + PRIME64_4; }
private long computeBody() { long hash = rotateLeft(v1, 1) + rotateLeft(v2, 7) + rotateLeft(v3, 12) + rotateLeft(v4, 18); hash = update(hash, v1); hash = update(hash, v2); hash = update(hash, v3); hash = update(hash, v4); return hash; }
/** * Special-purpose version for hashing a single long value. Value is treated as little-endian */ public static long hash64(long value) { long h2 = DEFAULT_SEED ^ SizeOf.SIZE_OF_LONG; long h1 = h2 + (h2 ^ (Long.rotateLeft(value * C1, 31) * C2)); return mix64(h1) + mix64(h1 + h2); }