<?php

/** @file searchiterator.inc
 * @ingroup Examples
 * @brief abstract class SearchIterator
 * @author  Marcus Boerger
 * @date    2003 - 2005
 *
 * SPL - Standard PHP Library
 */

/** @ingroup Examples
 * @brief Iterator to search for a specific element
 * @author  Marcus Boerger
 * @version 1.0
 *
 * This extended FilterIterator stops after finding the first acceptable
 * value.
 */
abstract class SearchIterator extends FilterIterator
{
    
/** @internal whether an entry was found already */
    
private $done false;

    
/** Rewind and reset so that it once again searches.
     * @return void
     */
    
function rewind()
    {
        
parent::rewind();
        
$this->done false;
    }

    
/** @return whether the current element is valid
     * which can only happen once per iteration.
     */
    
function valid()
    {
        return !
$this->done && parent::valid();
    }
    
    
/** Do not move forward but instead mark as finished.
     * @return void
     */
    
function next()
    {
        
$this->done true;
    }

    
/** Aggregates the inner iterator
     */    
    
function __call($func$params)
    {
        return 
call_user_func_array(array($this->getInnerIterator(), $func), $params);
    }
}

?>