]> granicus.if.org Git - php/commitdiff
Add new examples
authorMarcus Boerger <helly@php.net>
Sun, 26 Sep 2004 21:21:45 +0000 (21:21 +0000)
committerMarcus Boerger <helly@php.net>
Sun, 26 Sep 2004 21:21:45 +0000 (21:21 +0000)
ext/spl/examples/iteratoriterator.inc [new file with mode: 0755]
ext/spl/examples/outeriterator.inc [new file with mode: 0755]

diff --git a/ext/spl/examples/iteratoriterator.inc b/ext/spl/examples/iteratoriterator.inc
new file mode 100755 (executable)
index 0000000..3290fc7
--- /dev/null
@@ -0,0 +1,77 @@
+<?php
+
+/** \ingroup SPL
+ * \brief Basic Iterator wrapper
+ */
+class IteratorIterator implements OuterIterator
+{
+       /** Construct an IteratorIterator from an Iterator or an IteratorAggregate.
+        *
+        * Classes that only implement Traversable can be wrapped only after 
+        * converting class IteratorItaerator into c code.
+        */
+       function __construct(Traversable $iterator)
+       {
+               if ($iterator instanceof IteratorAggregate)
+               {
+                   $iterator = $iterator->getIterator();
+               }
+               if ($iterator instanceof Iterator)
+               {
+                       $this->iterator = $iterator;
+               }
+               else
+               {
+                       throw new Exception("Classes that only implement Traversable can be wrapped only after converting class IteratorItaerator into c code");
+               }
+       }
+
+       /** \return the inner iterator as passed to the constructor
+        */
+       function getInnerIterator()
+       {
+               return $this->iterator;
+       }
+
+       /** \return whetehr the iterator is valid
+        */
+       function valid()
+       {
+               return $this->iterator->valid();
+       }
+
+       /** \return current key
+        */
+       function key()
+       {
+               return $this->iterator->key();
+       }
+
+       /** \return current value
+        */
+       function current()
+       {
+               return $this->iterator->current();
+       }
+
+       /** forward to next element
+        */
+       function next()
+       {
+               return $this->iterator->next();
+       }
+
+       /** rewind to the first element
+        */
+       function rewind()
+       {
+               return $this->iterator->rewind();
+       }
+
+       /** The inner iterator must be public becaus ewhen this class will be
+        * converted to c code it won't no longer be available.
+        */
+       private $iterator;
+}
+
+?>
\ No newline at end of file
diff --git a/ext/spl/examples/outeriterator.inc b/ext/spl/examples/outeriterator.inc
new file mode 100755 (executable)
index 0000000..49923ba
--- /dev/null
@@ -0,0 +1,13 @@
+<?php
+
+/** \ingroup SPL
+ * \brief Interface to access inner iterator of iterator wrappers
+ */
+interface OuterIterator extends Iterator
+{
+       /** \return inner iterator
+        */
+    abstract function getInnerIterator();
+}
+
+?>
\ No newline at end of file