scala.runtime.Statics Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of scala-library Show documentation
Show all versions of scala-library Show documentation
Standard library for the Scala Programming Language
package scala.runtime;
/** Not for public consumption. Usage by the runtime only.
*/
public final class Statics {
public static int mix(int hash, int data) {
int h = mixLast(hash, data);
h = Integer.rotateLeft(h, 13);
return h * 5 + 0xe6546b64;
}
public static int mixLast(int hash, int data) {
int k = data;
k *= 0xcc9e2d51;
k = Integer.rotateLeft(k, 15);
k *= 0x1b873593;
return hash ^ k;
}
public static int finalizeHash(int hash, int length) {
return avalanche(hash ^ length);
}
/** Force all bits of the hash to avalanche. Used for finalizing the hash. */
public static int avalanche(int h) {
h ^= h >>> 16;
h *= 0x85ebca6b;
h ^= h >>> 13;
h *= 0xc2b2ae35;
h ^= h >>> 16;
return h;
}
public static int longHash(long lv) {
if ((int)lv == lv)
return (int)lv;
else
return (int)(lv ^ (lv >>> 32));
}
public static int doubleHash(double dv) {
int iv = (int)dv;
if (iv == dv)
return iv;
float fv = (float)dv;
if (fv == dv)
return java.lang.Float.floatToIntBits(fv);
long lv = (long)dv;
if (lv == dv)
return (int)lv;
lv = Double.doubleToLongBits(dv);
return (int)(lv ^ (lv >>> 32));
}
public static int floatHash(float fv) {
int iv = (int)fv;
if (iv == fv)
return iv;
long lv = (long)fv;
if (lv == fv)
return (int)(lv^(lv>>>32));
return java.lang.Float.floatToIntBits(fv);
}
public static int anyHash(Object x) {
if (x == null)
return 0;
if (x instanceof java.lang.Long)
return longHash(((java.lang.Long)x).longValue());
if (x instanceof java.lang.Double)
return doubleHash(((java.lang.Double)x).doubleValue());
if (x instanceof java.lang.Float)
return floatHash(((java.lang.Float)x).floatValue());
return x.hashCode();
}
}