Annotation of embedaddon/php/ext/spl/examples/recursivedualiterator.inc, revision 1.1

1.1     ! misho       1: <?php
        !             2: 
        !             3: /** @file recursivedualiterator.inc
        !             4:  * @ingroup Examples
        !             5:  * @brief class RecursiveDualIterator
        !             6:  * @author  Marcus Boerger
        !             7:  * @date    2003 - 2006
        !             8:  *
        !             9:  * SPL - Standard PHP Library
        !            10:  */
        !            11: 
        !            12: /** @ingroup Examples
        !            13:  * @brief   Synchronous iteration over two recursive iterators
        !            14:  * @author  Marcus Boerger
        !            15:  * @version 1.0
        !            16:  */
        !            17: class RecursiveDualIterator extends DualIterator implements RecursiveIterator
        !            18: {
        !            19:        private $ref;
        !            20: 
        !            21:        /** construct iterator from two RecursiveIterator instances
        !            22:         *
        !            23:         * @param lhs   Left  Hand Side Iterator
        !            24:         * @param rhs   Right Hand Side Iterator
        !            25:         * @param flags iteration flags
        !            26:         */
        !            27:        function __construct(RecursiveIterator $lhs, RecursiveIterator $rhs, 
        !            28:                                $flags = 0x33 /*DualIterator::DEFAULT_FLAGS*/)
        !            29:        {
        !            30:                parent::__construct($lhs, $rhs, $flags);
        !            31:        }
        !            32: 
        !            33:        /** @return whether both LHS and RHS have children
        !            34:         */
        !            35:        function hasChildren()
        !            36:        {
        !            37:                return $this->getLHS()->hasChildren() && $this->getRHS()->hasChildren();        
        !            38:        }
        !            39: 
        !            40:        /** @return new RecursiveDualIterator (late binding) for the two inner 
        !            41:         * iterators current children.
        !            42:         */
        !            43:        function getChildren()
        !            44:        {
        !            45:                if (empty($this->ref))
        !            46:                {
        !            47:                        $this->ref = new ReflectionClass($this);
        !            48:                }
        !            49:                return $this->ref->newInstance(
        !            50:                                        $this->getLHS()->getChildren(), $this->getRHS()->getChildren(), $this->getFlags());
        !            51:        }
        !            52: 
        !            53:        /** @return whether both inner iterators are valid, have same hasChildren()
        !            54:         * state and identical current and key values or both are non valid.
        !            55:         */
        !            56:        function areIdentical()
        !            57:        {
        !            58:                return $this->getLHS()->hasChildren() === $this->getRHS()->hasChildren()
        !            59:                        && parent::areIdentical();
        !            60:        }
        !            61: 
        !            62:        /** @return whether both inner iterators are valid, have same hasChildren()
        !            63:         * state and equal current and key values or both are invalid.
        !            64:         */
        !            65:        function areEqual()
        !            66:        {
        !            67:                return $this->getLHS()->hasChildren() === $this->getRHS()->hasChildren()
        !            68:                        && parent::areEqual();
        !            69:        }
        !            70: }
        !            71: 
        !            72: ?>

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