]> granicus.if.org Git - php/commitdiff
- MFH Add new example
authorMarcus Boerger <helly@php.net>
Sun, 2 Oct 2005 17:33:05 +0000 (17:33 +0000)
committerMarcus Boerger <helly@php.net>
Sun, 2 Oct 2005 17:33:05 +0000 (17:33 +0000)
ext/spl/examples/recursivetreeiterator.inc [new file with mode: 0755]

diff --git a/ext/spl/examples/recursivetreeiterator.inc b/ext/spl/examples/recursivetreeiterator.inc
new file mode 100755 (executable)
index 0000000..169b3a8
--- /dev/null
@@ -0,0 +1,48 @@
+<?php
+
+/** @file recursivetreeiterator.inc
+ * @ingroup Examples
+ * @brief   class RecursiveTreeIterator
+ * @author  Marcus Boerger, Johannes Schlueter
+ * @date    2005
+ *
+ * SPL - Standard PHP Library
+ */
+
+
+/** @ingroup Examples
+ * @brief   RecursiveIteratorIterator to generate ASCII graphic trees for the
+ *          entries in a RecursiveIterator
+ * @author  Marcus Boerger, Johannes Schlueter
+ * @version 1.0
+ */
+class RecursiveTreeIterator extends RecursiveIteratorIterator
+{
+       private $callToString;
+       
+       function __construct(RecursiveIterator $it, $cit_flags = CachingIterator::CATCH_GET_CHILD)
+       {
+               parent::__construct(new RecursiveCachingIterator($it, $cit_flags), 1);
+               $this->callToString = (bool)($cit_flags & CachingIterator::CALL_TOSTRING);
+       }
+
+       /** @return the current element prefixed with ASCII graphics
+        */
+       function current()
+       {
+               $tree = '';
+               for ($l=0; $l < $this->getDepth(); $l++) {
+                       $tree .= $this->getSubIterator($l)->hasNext() ? '| ' : '  ';
+               }
+               
+               return $tree . ($this->getSubIterator($l)->hasNext() ? '|-' : '\-')
+                      . ($this->callToString ? $this->getSubIterator($l)->__toString() : $this->getSubIterator($l)->current());
+       }
+
+       /** Aggregates the inner iterator
+        */
+       function __call($func, $params)
+       {
+               return call_user_func_array(array($this->getSubIterator(), $func), $params);
+       }
+}