diff options
Diffstat (limited to 'ext/spl/examples/searchiterator.inc')
-rw-r--r-- | ext/spl/examples/searchiterator.inc | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/ext/spl/examples/searchiterator.inc b/ext/spl/examples/searchiterator.inc new file mode 100644 index 0000000..944a4ac --- /dev/null +++ b/ext/spl/examples/searchiterator.inc @@ -0,0 +1,58 @@ +<?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); + } +} + +?>
\ No newline at end of file |