Annotation of embedaddon/php/ext/spl/examples/callbackfilteriterator.inc, revision 1.1.1.1

1.1       misho       1: <?php
                      2: 
                      3: /** @file callbackfilteriterator.inc
                      4:  * @ingroup Examples
                      5:  * @brief class CallbackFilterIterator
                      6:  * @author  Marcus Boerger
                      7:  * @author  Kevin McArthur
                      8:  * @date    2006 - 2006
                      9:  *
                     10:  * SPL - Standard PHP Library
                     11:  */
                     12: 
                     13: /** @ingroup Examples
                     14:  * @brief   A non abstract FiletrIterator that uses a callback foreach element
                     15:  * @author  Marcus Boerger
                     16:  * @author  Kevin McArthur
                     17:  * @version 1.0
                     18:  */
                     19: class CallbackFilterIterator extends FilterIterator
                     20: {
                     21:        const USE_FALSE = 0;  /**< mode: accept no elements, no callback */
                     22:        const USE_TRUE  = 1;  /**< mode: accept all elements, no callback */
                     23:        const USE_VALUE = 2;  /**< mode: pass value to callback */
                     24:        const USE_KEY   = 3;  /**< mode: pass key to callback */
                     25:        const USE_BOTH  = 4;  /**< mode: pass value and key to callback */
                     26: 
                     27:        const REPLACE   = 0x00000001; /**< flag: pass key/value by reference */
                     28: 
                     29:        private $callback; /**< callback to use */
                     30:        private $mode;     /**< mode any of USE_VALUE, USE_KEY, USE_BOTH */
                     31:        private $flags;    /**< flags (REPLACE) */
                     32:        private $key;      /**< key value */
                     33:        private $current;  /**< current value */
                     34: 
                     35:        /** Construct a CallbackFilterIterator
                     36:         *
                     37:         * @param it        inner iterator (iterator to filter)
                     38:         * @param callback  callback function
                     39:         * @param mode      any of USE_VALUE, USE_KEY, USE_BOTH
                     40:         * @param flags     any of 0, REPLACE
                     41:         */
                     42:        public function __construct(Iterator $it, $callback, $mode = self::USE_VALUE, $flags = 0)
                     43:        {
                     44:                parent::__construct($it);
                     45:                $this->callback = $callback;
                     46:                $this->mode     = $mode;
                     47:                $this->flags    = $flags;
                     48:        }
                     49: 
                     50:        /** Call the filter callback
                     51:         * @return result of filter callback
                     52:         */
                     53:        public function accept()
                     54:        {
                     55:                $this->key     = parent::key();
                     56:                $this->current = parent::current();
                     57: 
                     58:                switch($this->mode) {
                     59:                default:
                     60:                case self::USE_FALSE;
                     61:                        return false;
                     62:                case self::USE_TRUE:
                     63:                        return true;
                     64:                case self::USE_VALUE:
                     65:                        if($this->flags & self::REPLACE) {
                     66:                                return (bool) call_user_func($this->callback, &$this->current);
                     67:                        } else {
                     68:                                return (bool) call_user_func($this->callback, $this->current);
                     69:                        }
                     70:                case self::USE_KEY:
                     71:                        if($this->flags & self::REPLACE) {
                     72:                                return (bool) call_user_func($this->callback, &$this->key);
                     73:                        } else {
                     74:                                return (bool) call_user_func($this->callback, $this->key);
                     75:                        }
                     76:                case SELF::USE_BOTH:
                     77:                        if($this->flags & self::REPLACE) {
                     78:                                return (bool) call_user_func($this->callback, &$this->key, &$this->current);
                     79:                        } else {
                     80:                                return (bool) call_user_func($this->callback, $this->key, $this->current);
                     81:                        }
                     82:                }
                     83:        }
                     84: 
                     85:        /** @return current key value */
                     86:        function key()
                     87:        {
                     88:                return $this->key;
                     89:        }
                     90: 
                     91:        /** @return current value */
                     92:        function current()
                     93:        {
                     94:                return $this->current;
                     95:        }
                     96: 
                     97:        /** @return operation mode */
                     98:        function getMode()
                     99:        {
                    100:                return $this->mode;
                    101:        }
                    102: 
                    103:        /** @param $mode set new mode, @see mode */
                    104:        function setMode($mode)
                    105:        {
                    106:                $this->mode = $mode;
                    107:        }
                    108: 
                    109:        /** @return operation flags */
                    110:        function getFlags()
                    111:        {
                    112:                return $this->flags;
                    113:        }
                    114: 
                    115:        /** @param $flags set new flags, @see flags */
                    116:        function setFlags($flags)
                    117:        {
                    118:                $this->flags = $flags;
                    119:        }
                    120: }
                    121: 
                    122: ?>

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>