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>