package com.carrotsearch.hppc;
public final class BitMixer {
public static int mix(byte key) { return key * PHI_C32; }
public static int mix(byte key, int seed) { return (key ^ seed) * PHI_C32; }
public static int mix(short key) { return mixPhi(key); }
public static int mix(short key, int seed) { return mixPhi(key ^ seed); }
public static int mix(char key) { return mixPhi(key); }
public static int mix(char key, int seed) { return mixPhi(key ^ seed); }
public static int mix(int key) { return mix32(key); }
public static int mix(int key, int seed) { return mix32(key ^ seed); }
public static int mix(float key) { return mix32(Float.floatToIntBits(key)); }
public static int mix(float key, int seed) { return mix32(Float.floatToIntBits(key) ^ seed); }
public static int mix(double key) { return (int) mix64(Double.doubleToLongBits(key)); }
public static int mix(double key, int seed) { return (int) mix64(Double.doubleToLongBits(key) ^ seed); }
public static int mix(long key) { return (int) mix64(key); }
public static int mix(long key, int seed) { return (int) mix64(key ^ seed); }
public static int mix(Object key) { return key == null ? 0 : mix32(key.hashCode()); }
public static int mix(Object key, int seed) { return key == null ? 0 : mix32(key.hashCode() ^ seed); }
public static int mix32(int k) {
k = (k ^ (k >>> 16)) * 0x85ebca6b;
k = (k ^ (k >>> 13)) * 0xc2b2ae35;
return k ^ (k >>> 16);
}
public static long mix64(long z) {
z = (z ^ (z >>> 32)) * 0x4cd6944c5cc20b6dL;
z = (z ^ (z >>> 29)) * 0xfc12c5b19d3259e9L;
return z ^ (z >>> 32);
}
private static final int PHI_C32 = 0x9e3779b9;
private static final long PHI_C64 = 0x9e3779b97f4a7c15L;
public static int mixPhi(byte k) { final int h = k * PHI_C32; return h ^ (h >>> 16); }
public static int mixPhi(char k) { final int h = k * PHI_C32; return h ^ (h >>> 16); }
public static int mixPhi(short k) { final int h = k * PHI_C32; return h ^ (h >>> 16); }
public static int mixPhi(int k) { final int h = k * PHI_C32; return h ^ (h >>> 16); }
public static int mixPhi(float k) { final int h = Float.floatToIntBits(k) * PHI_C32; return h ^ (h >>> 16); }
public static int mixPhi(double k) { final long h = Double.doubleToLongBits(k) * PHI_C64; return (int) (h ^ (h >>> 32)); }
public static int mixPhi(long k) { final long h = k * PHI_C64; return (int) (h ^ (h >>> 32)); }
public static int mixPhi(Object k) { final int h = (k == null ? 0 : k.hashCode() * PHI_C32); return h ^ (h >>> 16); }
}