package com.ericfeminella.collections
{
/**
*
* Defines the contract for concrete Iterator implementations
* which must provide an API for traversing an aggregate object
*
*/
public interface IIterator
{
/**
*
* Determines if there are elements remaining in the
* aggregate
*
* @return true if an element remains, false if not
*
*/
function hasNext() : Boolean;
/**
*
* Retrieves the next element in the aggregate
*
* @return next element based on the current index
*
*/
function next() : *;
/**
*
* Resets the cursor / index of the Iterator to 0
*
*/
function reset() : void;
/**
*
* Determines the position of the current element in
* the aggreagate
*
* @return the current index of the aggreagate
*
*/
function position() : int;
/**
*
* Remove must be implemented to provide a standard iterator
* implementation.
*
* <p>
* Typically this method would not provide an actual implementation
* as an iterator is not to perform modifications, but rather
* simply provide a mechanism for iterating an object and thus an
* iterator is to be considered read-only.
* </p>
*
* <p>
* For implementations which do not provide support for
* <code>remove</code> it is recommeneded that an exception
* is thrown, typically of type UnsupportedOperationException
* </p>
*
*/
function remove() : void;
}
}