Annotation of embedaddon/php/ext/spl/internal/filteriterator.inc, revision 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>