key0-96/
key0-96/doc/key/
key0-96/doc/key/credits/
key0-96/doc/key/developers/
key0-96/doc/key/developers/resources/
key0-96/setup/caves/
key0-96/setup/help/
key0-96/setup/ruins/
key0-96/src/
key0-96/src/commands/
key0-96/src/events/
key0-96/src/hack/
key0-96/src/sql/
key0-96/src/swing/
key0-96/src/talker/forest/
key0-96/src/talker/objects/
key0-96/src/terminals/
/*
**               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();
		}
	}
	*/
}