All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.espertech.esper.collection.RollingEventBuffer Maven / Gradle / Ivy

There is a newer version: 7.1.0
Show newest version
/*
 ***************************************************************************************
 *  Copyright (C) 2006 EsperTech, Inc. All rights reserved.                            *
 *  http://www.espertech.com/esper                                                     *
 *  http://www.espertech.com                                                           *
 *  ---------------------------------------------------------------------------------- *
 *  The software in this package is published under the terms of the GPL license       *
 *  a copy of which has been included with this distribution in the license.txt file.  *
 ***************************************************************************************
 */
package com.espertech.esper.collection;

import com.espertech.esper.client.EventBean;

/**
 * Event buffer of a given size provides a random access API into the most current event to prior events
 * up to the given size. Oldest events roll out of the buffer first.
 * 

* Backed by a fixed-size array that is filled forward, then rolls back to the beginning * keeping track of the current position. */ public class RollingEventBuffer { private EventBean[] buffer; private int nextFreeIndex; /** * Ctor. * * @param size is the maximum number of events in buffer */ public RollingEventBuffer(int size) { if (size <= 0) { throw new IllegalArgumentException("Minimum buffer size is 1"); } nextFreeIndex = 0; buffer = new EventBean[size]; } /** * Add events to the buffer. * * @param events to add */ public void add(EventBean[] events) { if (events == null) { return; } for (int i = 0; i < events.length; i++) { add(events[i]); } } /** * Add an event to the buffer. * * @param theEvent to add */ public void add(EventBean theEvent) { buffer[nextFreeIndex] = theEvent; nextFreeIndex++; if (nextFreeIndex == buffer.length) { nextFreeIndex = 0; } } /** * Get an event prior to the last event posted given a number of events before the last. *

* Thus index 0 returns the last event added, index 1 returns the prior to the last event added * up to the maximum buffer size. * * @param index prior event index from zero to max size * @return prior event at given index */ public EventBean get(int index) { if (index >= buffer.length) { throw new IllegalArgumentException("Invalid index " + index + " for size " + buffer.length); } // The newest event is at (nextFreeIndex + 1) int newest = nextFreeIndex - 1; int relative = newest - index; if (relative < 0) { relative += buffer.length; } return buffer[relative]; } public int getSize() { return buffer.length; } public EventBean[] getBuffer() { return buffer; } public int getNextFreeIndex() { return nextFreeIndex; } public void setBuffer(EventBean[] buffer) { this.buffer = buffer; } public void setNextFreeIndex(int nextFreeIndex) { this.nextFreeIndex = nextFreeIndex; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy