package edu.brown.rand; import edu.brown.rand.RandomDistribution.DiscreteRNG; /** * @author pavlo */ public class WrappingRandomDistribution extends DiscreteRNG { private DiscreteRNG rng; private final long start; /** * Constructor * * @param rng * @param start */ public WrappingRandomDistribution(DiscreteRNG rng, long start) { super(rng.getRandom(), rng.getMin(), rng.getMax()); assert (start <= this.max); assert (start >= this.min); this.rng = rng; this.start = start; } @Override protected long nextLongImpl() { long next = this.rng.nextLong(); next += this.start; if (next >= this.max) { long delta = next - this.max; next = this.min + delta; } return (next); } }