summaryrefslogtreecommitdiff
path: root/ext/spl/examples/searchiterator.inc
diff options
context:
space:
mode:
Diffstat (limited to 'ext/spl/examples/searchiterator.inc')
-rw-r--r--ext/spl/examples/searchiterator.inc58
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