Annotation of embedaddon/php/ext/spl/internal/recursivetreeiterator.inc, revision 1.1

1.1     ! misho       1: <?php
        !             2: 
        !             3: /** @file recursivetreeiterator.inc
        !             4:  * @ingroup SPL
        !             5:  * @brief   class RecursiveTreeIterator
        !             6:  * @author  Marcus Boerger, Johannes Schlueter
        !             7:  * @date    2005 - 2009
        !             8:  *
        !             9:  * SPL - Standard PHP Library
        !            10:  */
        !            11: 
        !            12: 
        !            13: /** @ingroup SPL
        !            14:  * @brief   RecursiveIteratorIterator to generate ASCII graphic trees for the
        !            15:  *          entries in a RecursiveIterator
        !            16:  * @author  Marcus Boerger, Johannes Schlueter
        !            17:  * @version 1.1
        !            18:  * @since   PHP 5.3
        !            19:  */
        !            20: class RecursiveTreeIterator extends RecursiveIteratorIterator
        !            21: {
        !            22:        const BYPASS_CURRENT = 0x00000004;
        !            23:        const BYPASS_KEY     = 0x00000008;
        !            24: 
        !            25:        private $rit_flags;
        !            26: 
        !            27:        /**
        !            28:         * @param it         iterator to use as inner iterator
        !            29:         * @param rit_flags  flags passed to RecursiveIteratoIterator (parent)
        !            30:         * @param cit_flags  flags passed to RecursiveCachingIterator (for hasNext)
        !            31:         * @param mode       mode  passed to RecursiveIteratoIterator (parent)
        !            32:         */
        !            33:        function __construct(RecursiveIterator $it, $rit_flags = self::BYPASS_KEY, $cit_flags = CachingIterator::CATCH_GET_CHILD, $mode = self::SELF_FIRST)
        !            34:        {
        !            35:                parent::__construct(new RecursiveCachingIterator($it, $cit_flags), $mode, $rit_flags);
        !            36:                $this->rit_flags = $rit_flags;
        !            37:        }
        !            38: 
        !            39:        private $prefix = array(0=>'', 1=>'| ', 2=>'  ', 3=>'|-', 4=>'\-', 5=>'');
        !            40: 
        !            41:        /** Prefix used to start elements. */
        !            42:        const PREFIX_LEFT         = 0;
        !            43:        /** Prefix used if $level < depth and hasNext($level) == true. */
        !            44:        const PREFIX_MID_HAS_NEXT = 1;
        !            45:        /** Prefix used if $level < depth and hasNext($level) == false. */
        !            46:        const PREFIX_MID_LAST     = 2;
        !            47:        /** Prefix used if $level == depth and hasNext($level) == true. */
        !            48:        const PREFIX_END_HAS_NEXT = 3;
        !            49:        /** Prefix used if $level == depth and hasNext($level) == false. */
        !            50:        const PREFIX_END_LAST     = 4;
        !            51:        /** Prefix used right in front of the current element. */
        !            52:        const PREFIX_RIGHT        = 5;
        !            53: 
        !            54:        /**
        !            55:         * Set prefix part as used in getPrefix() and stored in $prefix.
        !            56:         * @param $part   any PREFIX_* const.
        !            57:         * @param $value  new prefix string for specified part.
        !            58:         * @throws OutOfRangeException if 0 > $part or $part > 5.
        !            59:         */
        !            60:        function setPrefixPart($part, $value)
        !            61:        {
        !            62:                if (0 > $part || $part > 5) {
        !            63:                        throw new OutOfRangeException();
        !            64:                }
        !            65:                $this->prefix[$part] = (string)$value;
        !            66:        }
        !            67: 
        !            68:        /** @return string to place in front of current element
        !            69:         */
        !            70:        function getPrefix()
        !            71:        {
        !            72:                $tree = '';
        !            73:                for ($level = 0; $level < $this->getDepth(); $level++)
        !            74:                {
        !            75:                        $tree .= $this->getSubIterator($level)->hasNext() ? $this->prefix[1] : $this->prefix[2];
        !            76:                }
        !            77:                $tree .= $this->getSubIterator($level)->hasNext() ? $this->prefix[3] : $this->prefix[4];
        !            78: 
        !            79:                return $this->prefix[0] . $tree . $this->prefix[5];
        !            80:        }
        !            81: 
        !            82:        /** @return string presentation build for current element
        !            83:         */
        !            84:        function getEntry()
        !            85:        {
        !            86:                return @(string)parent::current();
        !            87:        }
        !            88: 
        !            89:        /** @return string to place after the current element
        !            90:         */
        !            91:        function getPostfix()
        !            92:        {
        !            93:                return '';
        !            94:        }
        !            95: 
        !            96:        /** @return the current element prefixed and postfixed
        !            97:         */
        !            98:        function current()
        !            99:        {
        !           100:                if ($this->rit_flags & self::BYPASS_CURRENT)
        !           101:                {
        !           102:                        return parent::current();
        !           103:                }
        !           104:                else
        !           105:                {
        !           106:                        return $this->getPrefix() . $this->getEntry() .  $this->getPostfix();
        !           107:                }
        !           108:        }
        !           109: 
        !           110:        /** @return the current key prefixed and postfixed
        !           111:         */
        !           112:        function key()
        !           113:        {
        !           114:                if ($this->rit_flags & self::BYPASS_KEY)
        !           115:                {
        !           116:                        return parent::key();
        !           117:                }
        !           118:                else
        !           119:                {
        !           120:                        return $this->getPrefix() . parent::key() .  $this->getPostfix();
        !           121:                }
        !           122:        }
        !           123: 
        !           124:        /** Aggregates the inner iterator
        !           125:         */
        !           126:        function __call($func, $params)
        !           127:        {
        !           128:                return call_user_func_array(array($this->getSubIterator(), $func), $params);
        !           129:        }
        !           130: }
        !           131: 
        !           132: ?>

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