package net.i2p.stat; /** * Storage space for computations of various averages. * * @author zab * @since 0.9.4 */ public class RateAverages { /** thread-local temp instance */ private static final ThreadLocal<RateAverages> TEMP = new ThreadLocal<RateAverages>() { public RateAverages initialValue() { return new RateAverages(); } }; /** * @since 0.9.4 * @return thread-local temp instance. */ public static RateAverages getTemp() { return TEMP.get(); } private double average, current, last, totalValues; private long totalEventCount; void reset() { average = 0; current = 0; last = 0; totalEventCount = 0; totalValues = 0; } /** * @since 0.9.4 * @return one of several things: * if there are any events (current or last) => weighted average * otherwise if the useLifetime parameter to Rate.computeAverages was: * true => the lifetime average value * false => zero */ public double getAverage() { return average; } void setAverage(double average) { this.average = average; } /** * @since 0.9.4 * @return the current average == current value / current event count */ public double getCurrent() { return current; } void setCurrent(double current) { this.current = current; } /** * @since 0.9.4 * @return the last average == last value / last event count */ public double getLast() { return last; } void setLast(double last) { this.last = last; } /** * @since 0.9.4 * @return the total event count == current + last event counts */ public long getTotalEventCount() { return totalEventCount; } void setTotalEventCount(long totalEventCount) { this.totalEventCount = totalEventCount; } /** * @since 0.9.4 * @return the total values == current + last values */ public double getTotalValues() { return totalValues; } void setTotalValues(double totalValues) { this.totalValues = totalValues; } }