package org.apache.cassandra.stress.generatedata;
import org.apache.commons.math3.distribution.AbstractRealDistribution;
public class DistributionBoundApache extends Distribution
{
final AbstractRealDistribution delegate;
final long min, max;
public DistributionBoundApache(AbstractRealDistribution delegate, long min, long max)
{
this.delegate = delegate;
this.min = min;
this.max = max;
}
@Override
public long next()
{
return bound(min, max, delegate.sample());
}
@Override
public long inverseCumProb(double cumProb)
{
return bound(min, max, delegate.inverseCumulativeProbability(cumProb));
}
private static long bound(long min, long max, double val)
{
long r = (long) val;
if ((r >= min) & (r <= max))
return r;
if (r < min)
return min;
if (r > max)
return max;
throw new IllegalStateException();
}
}