package com.editev.chess;

import com.editev.util.Lists;

/** A growing, unsynchronized list of Boards. 
 *
 *  @see See the source here.
 */
public class Boards extends Lists {
    /** Actually allocates a new list of the right class and size. */
	protected Object newList( int capacity ) { return new Board[ capacity ];   }

    /** @return the list as an array of Board Objects. */
	protected Board[]  getList()              { return (Board[]) list; }

    /** @return the possibly capacity of the list -- if you want the length, use Lists.getLength(). */
	protected int  getCapacity()             { return getList().length; }

    /** @return the Board at a given integer index.
     * 
     *  @param i index of the Board.
     * 
     *  @throws ArrayIndexOutOfBoundsException if the index is not less than getLength()
     */
	public    Board getAt( int i ) {
	    Board[] boards = ((Board[]) Boards.this.checkList( i ) );
	    if (boards[ i ] == null) boards[ i ] = new Board();
	    return boards[ i ];
	}

    /** Puts a Board at the end of the list.
     * 
     *  @param board Board to append.
     * 
     */
	public void append( Board board )    {
	    int l = getLength();
	    setLength( l+1 );
	    getAt( l ).copyFrom( board );
	}

    /** Clears the list of Boards. */
	public void clear( )    { setLength( 0 ); }

    /** Creates an empty Board with the default capacity. */
	public Boards()                           { }

    /** Creates an empty Board with the specified capacity. */
	public Boards( int capacity )             { super( capacity ); }
	
	/** Represent all these boards for debugging purposes. */
	public String toString() {
	    StringBuffer s = new StringBuffer();
	    s.append(getLength() + " boards\n" );
	    for (int i=0; i