public boolean hasMeasurements() { return measurements.getN() > 0; } }
public void addValueIfNew(long value, long nowNano) { if ((measurements.getN() == 0) || (measurements.getNewest() != value)) addValue(value, nowNano); }
@Override public boolean hasNext() { return i < getN(); }
/** * @return @{code true} if the next call to {@link #add(long)} will * overwrite the oldest value. */ public boolean willAddOverwrite() { return getN() == getCapacity(); }
public long getOldest() { if (getN() == 0) throw new NoSuchElementException(); return getAt(0); }
public void removeNewestN(int n) { if (getN() < n) throw new IllegalArgumentException(); for (int i = 0; i < n; ++i) removeValueFormSumAt(fill - i - 1); fill -= n; }
public double average() { return measurements.getSum().doubleValue() / measurements.getN(); }
public void removeOldestN(int n) { if (getN() < n) throw new IllegalArgumentException(); for (int i = 0; i < n; ++i) removeValueFormSumAt(i); advance(n); fill -= n; }
public void addValue(long value, long nanoTime) { while (timestamps.getN() > 0) { double age = (nanoTime - timestamps.getOldest()) / 1.e9; if (age < windowSizeInSeconds) break; timestamps.removeOldestN(1); measurements.removeOldestN(1); } timestamps.add(nanoTime); measurements.add(value); }
/** * Adds a new value to the ring buffer, overwriting the oldest value if the * ring buffer is already full. */ public void add(long value) { int i = indexOf(getN()); if (willAddOverwrite()) { removeValueFormSumAt(0); advance(1); } else { fill += 1; } buffer[i] = value; addToSum(value); }