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

package jdk.jfr.internal.util;

import java.util.Random;

public class UniversalHashFamily {
    final Random rand = new Random();

    private static long getA(long hashFunction) {
        return hashFunction | 1;
    }

    private static long getB(long hashFunction, long mask) {
        return hashFunction & mask;
    }

    private static long getHash(long key, long hashFunction, long mask) {
        return (getA(hashFunction) * key) + (hashFunction & mask);
    }

    public static int getIndex(long key, long hashFunction, long shift, long mask) {
        return (int)(getHash(key, hashFunction, mask) >>> shift);
    }

    public long getRandomHashFunction() {
        return rand.nextLong() & Long.MAX_VALUE;
    }
}