1: <?php
2:
3: /**
4: * This file is part of the Nette Framework (http://nette.org)
5: *
6: * Copyright (c) 2004 David Grudl (http://davidgrudl.com)
7: *
8: * For the full copyright and license information, please view
9: * the file license.txt that was distributed with this source code.
10: * @package Nette\Iterators
11: */
12:
13:
14:
15: /**
16: * Generic recursive iterator.
17: *
18: * @author David Grudl
19: * @package Nette\Iterators
20: */
21: class NGenericRecursiveIterator extends IteratorIterator implements RecursiveIterator, Countable
22: {
23:
24: /**
25: * Has the current element has children?
26: * @return bool
27: */
28: public function hasChildren()
29: {
30: $obj = $this->current();
31: return ($obj instanceof IteratorAggregate && $obj->getIterator() instanceof RecursiveIterator)
32: || $obj instanceof RecursiveIterator;
33: }
34:
35:
36:
37: /**
38: * The sub-iterator for the current element.
39: * @return RecursiveIterator
40: */
41: public function getChildren()
42: {
43: $obj = $this->current();
44: return $obj instanceof IteratorAggregate ? $obj->getIterator() : $obj;
45: }
46:
47:
48:
49: /**
50: * Returns the count of elements.
51: * @return int
52: */
53: public function count()
54: {
55: return iterator_count($this);
56: }
57:
58: }
59: