package org.minperf.universal;

/**
 * A sample hash implementation for long keys.
 */
public class LongHash implements UniversalHash<Long> {

    @Override
    public long universalHash(Long key, long index) {
        long x = key.longValue();
        long v0 = index ^ 0x736f6d6570736575L;
        long v1 = index ^ 0x646f72616e646f6dL;
        long v2 = index ^ 0x6c7967656e657261L;
        long v3 = index ^ 0x7465646279746573L;
        v3 ^= x;
        for (int i = 0; i < 4; 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);
        }
        v0 ^= x;
        return v0 ^ v1 ^ v2 ^ v3;
    }

    @Override
    public String toString() {
        return "LongHash (SipHash)";
    }

}
@@ -140,34 +140,27 @@
  %7B%0A%0A    
-@Override%0A    publ
+public stat
 ic long 
@@ -177,16 +177,14 @@
 ash(
-L
+l
 ong 
-key
+x
 , lo
@@ -199,42 +199,8 @@
 ) %7B%0A
-        long x = key.longValue();%0A
     
@@ -934,16 +934,140 @@
 %0A    %7D%0A%0A
+    @Override%0A    public long universalHash(Long key, long index) %7B%0A        return universalHash((long) key, index);%0A    %7D%0A%0A
     @Ove

Allow using primitive keys