package freenet.support;
import freenet.support.math.RunningAverage;
import freenet.support.math.TrivialRunningAverage;
/**
* Similiar to a standard histogram, but each bar is reasoned independently.
* Pretty much just an array of running averages.
* Used for tracking success rates per-location.
*/
public class Histogram2 {
private final double MAX;
private final RunningAverage[] bars;
public Histogram2(final int numBars, final double maxValue) {
this.MAX=maxValue;
this.bars=new RunningAverage[numBars];
for (int i=0; i<numBars; i++) {
this.bars[i]=new TrivialRunningAverage();
}
}
public void report(final double key, final double value) {
if (key<0.0 || key>=MAX) return;
int n=(int)(bars.length*key/MAX);
bars[n].report(value);
}
public int[] getPercentageArray(int localMax) {
int[] retval=new int[bars.length];
for (int i=0; i<retval.length; i++) {
int val=(int)(bars[i].currentValue()*localMax/MAX);
retval[i]=val;
}
return retval;
}
}