/* This code is part of Freenet. It is distributed under the GNU General
* Public License, version 2 (or at your option any later version). See
* http://www.gnu.org/ for further details of the GPL. */
package freenet.support.math;
import java.io.Serializable;
/** A running average. That is, something that takes reports as numbers and generates a current value.
* Synchronized class, including clone(). */
public interface RunningAverage extends Serializable {
/**
* Copy the RunningAverage (create a snapshot). Deep copy, the new RA won't change when the first one
* does. Will synchronize on the original during the copy process.
*/
public RunningAverage clone();
/**
*
* @return
*/
public double currentValue();
/**
*
* @param d
*/
public void report(double d);
/**
*
* @param d
*/
public void report(long d);
/**
* Get what currentValue() would be if we reported some given value
* @param r the value to mimic reporting
* @return the output of currentValue() if we were to report r
*/
public double valueIfReported(double r);
/**
* @return the total number of reports on this RunningAverage so far.
* Used for weighted averages, confidence/newbieness estimation etc.
*/
public long countReports();
}