SPL-StandardPHPLibrary
Public Member Functions | Public Attributes | Private Attributes
RecursiveCachingIterator Class Reference
Inheritance diagram for RecursiveCachingIterator:
Inheritance graph
[legend]
Collaboration diagram for RecursiveCachingIterator:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 __call ($func, $params)
 __construct (RecursiveIterator $it, $flags=self::CALL_TOSTRING)
 __toString ()
 current ()
 getChildren ()
 getInnerIterator ()
 hasChildren ()
 hasNext ()
 key ()
 next ()
 rewind ()
 valid ()

Public Attributes

const CALL_TOSTRING = 0x00000001
const CATCH_GET_CHILD = 0x00000002
const TOSTRING_USE_CURRENT = 0x00000020
const TOSTRING_USE_KEY = 0x00000010

Private Attributes

 $getChildren
 $hasChildren

Detailed Description

Cached recursive iteration over another Iterator.

Author:
Marcus Boerger
Version:
1.2
Since:
PHP 5.1
See also:
CachingIterator

Definition at line 20 of file recursivecachingiterator.inc.


Constructor & Destructor Documentation

RecursiveCachingIterator::__construct ( RecursiveIterator it,
flags = self::CALL_TOSTRING 
)

Construct from another iterator.

Parameters:
itIterator to cache
flagsBitmask:
  • CALL_TOSTRING (whether to call __toString() for every element)
  • CATCH_GET_CHILD (whether to catch exceptions when trying to get childs)

Definition at line 32 of file recursivecachingiterator.inc.

    {
        parent::__construct($it, $flags);
    }

Member Function Documentation

CachingIterator::__call ( func,
params 
) [inherited]

Aggregate the inner iterator.

Parameters:
funcName of method to invoke
paramsArray of parameters to pass to method

Definition at line 122 of file cachingiterator.inc.

    {
        return call_user_func_array(array($this->it, $func), $params);
    }
CachingIterator::__toString ( ) [inherited]
Returns:
the string represenatation that was generated for the current element
Exceptions:
exceptionwhen CALL_TOSTRING was not specified in constructor

Definition at line 131 of file cachingiterator.inc.

References CachingIterator\current(), and CachingIterator\key().

    {
        if ($this->flags & self::TOSTRING_USE_KEY)
        {
            return $this->key;
        }
        else if ($this->flags & self::TOSTRING_USE_CURRENT)
        {
            return $this->current;
        }
        if (!$this->flags & self::CALL_TOSTRING)
        {
            throw new exception('CachingIterator does not fetch string value (see CachingIterator::__construct)');
        }
        return $this->strValue;
    }

Here is the call graph for this function:

CachingIterator::current ( ) [inherited]
Returns:
the current element

Implements Iterator.

Definition at line 105 of file cachingiterator.inc.

Referenced by CachingIterator\__toString(), and CachingIterator\next().

    {
        return $this->current;
    }
RecursiveCachingIterator::getChildren ( )
Returns:
An Iterator for the children

Implements RecursiveIterator.

Definition at line 93 of file recursivecachingiterator.inc.

    {
        return $this->getChildren;
    }
CachingIterator::getInnerIterator ( ) [inherited]
Returns:
The inner iterator

Implements OuterIterator.

Definition at line 151 of file cachingiterator.inc.

    {
        return $this->it;
    }
RecursiveCachingIterator::hasChildren ( )
Returns:
whether the current element has children
Note:
The check whether the Iterator for the children can be created was already executed. Hence when flag CATCH_GET_CHILD was given in constructor this fucntion returns false so that getChildren does not try to access those children.

Implements RecursiveIterator.

Definition at line 86 of file recursivecachingiterator.inc.

    {
        return $this->hasChildren;
    }
CachingIterator::hasNext ( ) [inherited]
Returns:
whether there is one more element

Definition at line 98 of file cachingiterator.inc.

    {
        return $this->it->valid();
    }
CachingIterator::key ( ) [inherited]
Returns:
the current key

Implements Iterator.

Definition at line 112 of file cachingiterator.inc.

Referenced by CachingIterator\__toString(), and CachingIterator\next().

    {
        return $this->key;
    }
CachingIterator::next ( ) [inherited]

Forward to the next element.

Implements Iterator.

Definition at line 69 of file cachingiterator.inc.

References CachingIterator\current(), CachingIterator\key(), and CachingIterator\valid().

Referenced by CachingIterator\__construct(), and CachingIterator\rewind().

    {
        if ($this->valid = $this->it->valid()) {
            $this->current = $this->it->current();
            $this->key = $this->it->key();
            if ($this->flags & self::CALL_TOSTRING) {
                if (is_object($this->current)) {
                    $this->strValue = $this->current->__toString();
                } else {
                    $this->strValue = (string)$this->current;
                }
            }
        } else {
            $this->current = NULL;
            $this->key = NULL;
            $this->strValue = NULL;
        }
        $this->it->next();
    }

Here is the call graph for this function:

RecursiveCachingIterator::rewind ( )

Rewind Iterator.

Reimplemented from CachingIterator.

CachingIterator::valid ( ) [inherited]
Returns:
whether the iterator is valid

Implements Iterator.

Definition at line 91 of file cachingiterator.inc.

Referenced by CachingIterator\next().

    {
        return $this->valid;
    }

Member Data Documentation

RecursiveCachingIterator::$getChildren [private]

Definition at line 23 of file recursivecachingiterator.inc.

RecursiveCachingIterator::$hasChildren [private]

Definition at line 22 of file recursivecachingiterator.inc.

const CachingIterator::CALL_TOSTRING = 0x00000001 [inherited]
const CachingIterator::CATCH_GET_CHILD = 0x00000002 [inherited]
const CachingIterator::TOSTRING_USE_CURRENT = 0x00000020 [inherited]

Definition at line 33 of file cachingiterator.inc.

const CachingIterator::TOSTRING_USE_KEY = 0x00000010 [inherited]

Definition at line 32 of file cachingiterator.inc.


The documentation for this class was generated from the following file: