src/jdk.jfr/share/classes/jdk/jfr/internal/util/UniversalHashFamily.java
author mgronlun
Fri, 17 May 2019 18:03:14 +0200
branchJEP-349-branch
changeset 57361 53dccc90a5be
permissions -rw-r--r--
Preview-addendum
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
57361
53dccc90a5be Preview-addendum
mgronlun
parents:
diff changeset
     1
package jdk.jfr.internal.util;
53dccc90a5be Preview-addendum
mgronlun
parents:
diff changeset
     2
53dccc90a5be Preview-addendum
mgronlun
parents:
diff changeset
     3
import java.util.Random;
53dccc90a5be Preview-addendum
mgronlun
parents:
diff changeset
     4
53dccc90a5be Preview-addendum
mgronlun
parents:
diff changeset
     5
public class UniversalHashFamily {
53dccc90a5be Preview-addendum
mgronlun
parents:
diff changeset
     6
    final Random rand = new Random();
53dccc90a5be Preview-addendum
mgronlun
parents:
diff changeset
     7
53dccc90a5be Preview-addendum
mgronlun
parents:
diff changeset
     8
    private static long getA(long hashFunction) {
53dccc90a5be Preview-addendum
mgronlun
parents:
diff changeset
     9
        return hashFunction | 1;
53dccc90a5be Preview-addendum
mgronlun
parents:
diff changeset
    10
    }
53dccc90a5be Preview-addendum
mgronlun
parents:
diff changeset
    11
53dccc90a5be Preview-addendum
mgronlun
parents:
diff changeset
    12
    private static long getB(long hashFunction, long mask) {
53dccc90a5be Preview-addendum
mgronlun
parents:
diff changeset
    13
        return hashFunction & mask;
53dccc90a5be Preview-addendum
mgronlun
parents:
diff changeset
    14
    }
53dccc90a5be Preview-addendum
mgronlun
parents:
diff changeset
    15
53dccc90a5be Preview-addendum
mgronlun
parents:
diff changeset
    16
    private static long getHash(long key, long hashFunction, long mask) {
53dccc90a5be Preview-addendum
mgronlun
parents:
diff changeset
    17
        return (getA(hashFunction) * key) + (hashFunction & mask);
53dccc90a5be Preview-addendum
mgronlun
parents:
diff changeset
    18
    }
53dccc90a5be Preview-addendum
mgronlun
parents:
diff changeset
    19
53dccc90a5be Preview-addendum
mgronlun
parents:
diff changeset
    20
    public static int getIndex(long key, long hashFunction, long shift, long mask) {
53dccc90a5be Preview-addendum
mgronlun
parents:
diff changeset
    21
        return (int)(getHash(key, hashFunction, mask) >>> shift);
53dccc90a5be Preview-addendum
mgronlun
parents:
diff changeset
    22
    }
53dccc90a5be Preview-addendum
mgronlun
parents:
diff changeset
    23
53dccc90a5be Preview-addendum
mgronlun
parents:
diff changeset
    24
    public long getRandomHashFunction() {
53dccc90a5be Preview-addendum
mgronlun
parents:
diff changeset
    25
        return rand.nextLong() & Long.MAX_VALUE;
53dccc90a5be Preview-addendum
mgronlun
parents:
diff changeset
    26
    }
53dccc90a5be Preview-addendum
mgronlun
parents:
diff changeset
    27
}