package freenet.support.math; public final class TrivialRunningAverage implements RunningAverage, Cloneable { private static final long serialVersionUID = 1L; private long reports; private double total; /** * * @param average */ public TrivialRunningAverage(TrivialRunningAverage average) { this.reports = average.reports; this.total = average.total; } /** * */ public TrivialRunningAverage() { reports = 0; total = 0.0; } @Override public synchronized long countReports() { return reports; } public synchronized double totalValue() { return total; } /** * * @return */ @Override public synchronized double currentValue() { return total / reports; } /** * * @param d */ @Override public synchronized void report(double d) { total += d; reports++; // TODO Auto-generated method stub } /** * * @param d */ @Override public void report(long d) { report((double)d); } @Override public synchronized double valueIfReported(double r) { return (total + r) / (reports + 1); } @Override public TrivialRunningAverage clone() { // Override clone() for synchronization. // Implement Cloneable to shut up findbugs. synchronized (this) { return new TrivialRunningAverage(this); } } }