<?php

/** @file seekableiterator.inc
 * @ingroup SPL
 * @brief class SeekableIterator
 * @author  Marcus Boerger
 * @date    2003 - 2009
 *
 * SPL - Standard PHP Library
 */

/** @brief seekable iterator
 * @author  Marcus Boerger
 * @version 1.0
 * @since PHP 5.0
 *
 * Turns a normal iterator ino a seekable iterator. When there is a way
 * to seek on an iterator LimitIterator can use this to efficiently rewind
 * to offset.
 */
interface SeekableIterator extends Iterator
{
    
/** Seek to an absolute position
     *
     * \param $index position to seek to
     * \return void
     *
     * The method should throw an exception if it is not possible to seek to 
     * the given position. Typically this exception should be of type 
     * OutOfBoundsException.
     \code
    function seek($index);
        $this->rewind();
        $position = 0;
        while($position < $index && $this->valid()) {
            $this->next();
            $position++;
        }
        if (!$this->valid()) {
            throw new OutOfBoundsException('Invalid seek position');
        }
    }
     \endcode
     */
    
function seek($index);
}

?>