Annotation of embedaddon/php/ext/spl/internal/filteriterator.inc, revision 1.1.1.1
1.1 misho 1: <?php
2:
3: /** @file filteriterator.inc
4: * @ingroup SPL
5: * @brief class FilterIterator
6: * @author Marcus Boerger
7: * @date 2003 - 2009
8: *
9: * SPL - Standard PHP Library
10: */
11:
12: /**
13: * @brief Abstract filter for iterators
14: * @author Marcus Boerger
15: * @version 1.1
16: * @since PHP 5.0
17: *
18: * Instances of this class act as a filter around iterators. In other words
19: * you can put an iterator into the constructor and the instance will only
20: * return selected (accepted) elements.
21: *
22: * The only thing that needs to be done to make this work is implementing
23: * method accept(). Typically this invloves reading the current element or
24: * key of the inner Iterator and checking whether it is acceptable.
25: */
26: abstract class FilterIterator implements OuterIterator
27: {
28: private $it;
29:
30: /**
31: * Constructs a filter around another iterator.
32: *
33: * @param it Iterator to filter
34: */
35: function __construct(Iterator $it) {
36: $this->it = $it;
37: }
38:
39: /**
40: * Rewind the inner iterator.
41: */
42: function rewind() {
43: $this->it->rewind();
44: $this->fetch();
45: }
46:
47: /**
48: * Accept function to decide whether an element of the inner iterator
49: * should be accessible through the Filteriterator.
50: *
51: * @return whether or not to expose the current element of the inner
52: * iterator.
53: */
54: abstract function accept();
55:
56: /**
57: * Fetch next element and store it.
58: *
59: * @return void
60: */
61: protected function fetch() {
62: while ($this->it->valid()) {
63: if ($this->accept()) {
64: return;
65: }
66: $this->it->next();
67: };
68: }
69:
70: /**
71: * Move to next element
72: *
73: * @return void
74: */
75: function next() {
76: $this->it->next();
77: $this->fetch();
78: }
79:
80: /**
81: * @return Whether more elements are available
82: */
83: function valid() {
84: return $this->it->valid();
85: }
86:
87: /**
88: * @return The current key
89: */
90: function key() {
91: return $this->it->key();
92: }
93:
94: /**
95: * @return The current value
96: */
97: function current() {
98: return $this->it->current();
99: }
100:
101: /**
102: * hidden __clone
103: */
104: protected function __clone() {
105: // disallow clone
106: }
107:
108: /**
109: * @return The inner iterator
110: */
111: function getInnerIterator()
112: {
113: return $this->it;
114: }
115:
116: /** Aggregate the inner iterator
117: *
118: * @param func Name of method to invoke
119: * @param params Array of parameters to pass to method
120: */
121: function __call($func, $params)
122: {
123: return call_user_func_array(array($this->it, $func), $params);
124: }
125: }
126:
127: ?>
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>