package org.marketcetera.metrics;
import org.marketcetera.util.misc.ClassVersion;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.Queue;
import java.util.Iterator;
/* $License$ */
/**
* Records information about every iteration, through the checkpoints, from
* begin to end. Each instance, when recorded, results in a row of data in
* the csv file.
*
* @author anshul@marketcetera.com
* @version $Id: IterationInfo.java 16154 2012-07-14 16:34:05Z colin $
* @since 2.0.0
* @see PerThreadInfo
*/
@ClassVersion("$Id: IterationInfo.java 16154 2012-07-14 16:34:05Z colin $")
final class IterationInfo implements Iterable<CheckpointInfo> {
/**
* Clears the saved information. Resets the state back to as it was
* when the instance was constructed.
*/
public void clear() {
mCheckpoints.clear();
mNumIterations=0;
}
/**
* Sets the total/cumulative number of iterations until this iteration.
*
* @param inNumIterations the total/cumulative number of iterations.
*/
public void setNumIterations(long inNumIterations) {
mNumIterations = inNumIterations;
}
/**
* The total/cumulative number of iterations including this iteration.
*
* @return total/cumulative number of iteration until and including
* this iteration.
*/
public long getNumIterations() {
return mNumIterations;
}
/**
* Returns true if this iteration contains no checkpoints.
*
* @return true if this iteration contains no checkpoints.
*/
public boolean isEmpty() {
return mCheckpoints.isEmpty();
}
/**
* Adds the supplied checkpoint info to this iteration.
*
* @param inInfo the supplied checkpoint info.
*/
public void addCheckpoint(CheckpointInfo inInfo) {
mCheckpoints.add(inInfo);
}
@Override
public Iterator<CheckpointInfo> iterator() {
return mCheckpoints.iterator();
}
/**
* The list of checkpoints.
*/
private final Queue<CheckpointInfo> mCheckpoints = new ConcurrentLinkedQueue<CheckpointInfo>();
/**
* The iteration number represented by this iteration info.
*/
private volatile long mNumIterations;
}