/* ** j###t ########## #### #### ** j###t ########## #### #### ** j###T "###L J###" ** ######P' ########## ######### ** ######k, ########## T######T ** ####~###L #### ** #### q###L ########## .##### ** #### \###L ########## #####" */ package key.util; import java.io.*; import java.util.Enumeration; import java.util.NoSuchElementException; public class CircularBuffer implements java.io.Serializable { private Object[] underlying; private int maximum; private int start; private int end; public CircularBuffer( int maxElements ) { if( maxElements < 2 ) throw new IllegalArgumentException( "Less than 2 elements in a circular buffer?" ); maximum = maxElements + 1; start = maximum-1; end = 0; underlying = new Object[ maximum ]; } public void addElement( Object o ) { underlying[ end ] = o; end++; if( end > start ) start = (start+1) % maximum; end %= maximum; } public Enumeration elements() { return( new Enumeration() { int upto = (start+1) % maximum; public boolean hasMoreElements() { return( upto != end ); } public Object nextElement() { if( upto == end ) throw new NoSuchElementException(); Object o = underlying[ upto ]; upto = (upto + 1) % maximum; return( o ); } } ); } /* public static void main( String args[] ) { CircularBuffer cb = new CircularBuffer( 5 ); DataInputStream dis = new DataInputStream( System.in ); try { while( true ) { System.out.print( "New value: " ); String s = dis.readLine(); System.out.println( "Adding '" + s + "'" ); cb.addElement( s ); System.out.println( "------------" ); int i = 0; for( Enumeration e = cb.elements(); e.hasMoreElements(); ) System.out.println( " " + i++ + " " + ((String) e.nextElement()) ); System.out.println( "------------" ); System.out.println( "" ); } } catch( Exception e ) { e.printStackTrace(); } } */ }