package mikera.util;
import mikera.randomz.Hash;
/**
* Implementation of Random class using XORShift RNG
*
* Not thread safe: designed for use in single threaded contexts
*
* @author Mike Anderson
*
*/
public final class Random extends java.util.Random {
private static final long serialVersionUID = 6868944865706425166L;
private long state=ensureState(System.nanoTime());
public Random() {
}
public Random(long state) {
this.state=ensureState(state);
}
private static final long ensureState(long l) {
if (l==0) return 54384849948L;
return l;
}
@Override
protected int next(int bits) {
return (int)(nextLong()>>>(64-bits));
}
@Override
public long nextLong() {
long a=state;
state=Rand.xorShift64(a);
return a;
}
@Override
public void setSeed(long seed) {
state=ensureState(seed);
}
public long getSeed() {
return state;
}
@Override
public boolean equals(Object o) {
if (o instanceof Random) {
return equals((Random)o);
}
return super.equals(o);
}
@Override
public Random clone() {
return new Random(this.state);
}
public boolean equals(Random o) {
return state==o.state;
}
@Override
public int hashCode() {
return Hash.hashCode(state);
}
}
Ads help maintain this website.