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

List of all members.

Public Member Functions

 __construct (Iterator $lhs, Iterator $rhs, $flags=0x13)
 areEqual ()
 areIdentical ()
 current ()
 getFlags ()
 getLHS ()
 getRHS ()
 key ()
 next ()
 rewind ()
 setFlags ($flags)
 valid ()

Static Public Member Functions

static compareIterators (Iterator $lhs, Iterator $rhs, $identical=false)

Public Attributes

const CURRENT_0 = 0x00
const CURRENT_ARRAY = 0x03
const CURRENT_LHS = 0x01
const CURRENT_RHS = 0x02
const DEFAULT_FLAGS = 0x13
const KEY_0 = 0x00
const KEY_LHS = 0x10
const KEY_RHS = 0x20

Private Attributes

 $flags
 $lhs
 $rhs

Detailed Description

Synchronous iteration over two iterators.

Author:
Marcus Boerger
Version:
1.3

Definition at line 17 of file dualiterator.inc.


Constructor & Destructor Documentation

DualIterator::__construct ( Iterator lhs,
Iterator rhs,
flags = 0x13 
)

construct iterator from two iterators

Parameters:
lhsLeft Hand Side Iterator
rhsRight Hand Side Iterator
flagsiteration flags

Definition at line 40 of file dualiterator.inc.

References $flags, $lhs, and $rhs.

    {
        $this->lhs   = $lhs;
        $this->rhs   = $rhs;
        $this->flags = $flags;
    }

Member Function Documentation

DualIterator::areEqual ( )
Returns:
whether both inner iterators are valid and have equal current and key values or both are non valid.

Reimplemented in RecursiveDualIterator.

Definition at line 147 of file dualiterator.inc.

References valid().

    {
        return $this->valid()
             ? $this->lhs->current() ==  $this->rhs->current()
            && $this->lhs->key()     ==  $this->rhs->key()
             : $this->lhs->valid()   ==  $this->rhs->valid();
    }

Here is the call graph for this function:

DualIterator::areIdentical ( )
Returns:
whether both inner iterators are valid and have identical current and key values or both are non valid.

Reimplemented in RecursiveDualIterator.

Definition at line 136 of file dualiterator.inc.

References valid().

    {
        return $this->valid()
             ? $this->lhs->current() === $this->rhs->current()
            && $this->lhs->key()     === $this->rhs->key()
             : $this->lhs->valid()   ==  $this->rhs->valid();
    }

Here is the call graph for this function:

static DualIterator::compareIterators ( Iterator lhs,
Iterator rhs,
identical = false 
) [static]

Compare two iterators.

Parameters:
lhsLeft Hand Side Iterator
rhsRight Hand Side Iterator
identicalwhether to use areEqual() or areIdentical()
Returns:
whether both iterators are equal/identical
Note:
If one implements RecursiveIterator the other must do as well. And if both do then a recursive comparison is being used.

Definition at line 165 of file dualiterator.inc.

References $it.

    {
        if ($lhs instanceof RecursiveIterator)
        {
            if ($rhs instanceof RecursiveIterator)
            {
                $it = new RecursiveDualIterator($lhs, $rhs, 
                                self::CURRENT_0 | self::KEY_0);
                $it = new RecursiveCompareDualIterator($it);
            }
            else
            {
                return false;
            }
        }
        else
        {
            $it = new DualIterator($lhs, $rhs, self::CURRENT_0 | self::KEY_0);
        }

        if ($identical)
        {
            foreach($it as $n)
            {
                if (!$it->areIdentical())
                {
                    return false;
                }
            }
        }
        else
        {
            foreach($it as $n)
            {
                if (!$it->areEqual())
                {
                    return false;
                }
            }
        }
        return $identical ? $it->areIdentical() : $it->areEqual();
    }
DualIterator::current ( )
Returns:
current value depending on CURRENT_* flags

Implements Iterator.

Definition at line 93 of file dualiterator.inc.

    {
        switch($this->flags & 0x0F)
        {
        default:
        case self::CURRENT_ARRAY:
            return array($this->lhs->current(), $this->rhs->current());
        case self::CURRENT_LHS:
            return $this->lhs->current();
        case self::CURRENT_RHS:
            return $this->rhs->current();
        case self::CURRENT_0:
            return NULL;
        }
    }
DualIterator::getFlags ( )
Returns:
current flags

Definition at line 71 of file dualiterator.inc.

Referenced by RecursiveDualIterator\getChildren().

    {
        return $this->flags;
    }
DualIterator::getLHS ( )
DualIterator::getRHS ( )
DualIterator::key ( )
Returns:
key value depending on KEY_* flags

Implements Iterator.

Definition at line 111 of file dualiterator.inc.

    {
        switch($this->flags & 0xF0)
        {
        default:
        case self::KEY_LHS:
            return $this->lhs->key();
        case self::KEY_RHS:
            return $this->rhs->key();
        case self::KEY_0:
            return NULL;
        }
    }
DualIterator::next ( )

move both inner iterators forward

Implements Iterator.

Definition at line 127 of file dualiterator.inc.

    {
        $this->lhs->next();
        $this->rhs->next();
    }
DualIterator::rewind ( )

rewind both inner iterators

Implements Iterator.

Definition at line 78 of file dualiterator.inc.

    {
        $this->lhs->rewind();
        $this->rhs->rewind();   
    }
DualIterator::setFlags ( flags)
Parameters:
flagsnew flags

Definition at line 64 of file dualiterator.inc.

References $flags.

    {
        $this->flags = $flags;
    }
DualIterator::valid ( )
Returns:
whether both inner iterators are valid

Implements Iterator.

Definition at line 86 of file dualiterator.inc.

Referenced by areEqual(), and areIdentical().

    {
        return $this->lhs->valid() && $this->rhs->valid();  
    }

Member Data Documentation

DualIterator::$flags [private]

Definition at line 32 of file dualiterator.inc.

Referenced by RecursiveDualIterator\__construct(), __construct(), and setFlags().

DualIterator::$lhs [private]

Definition at line 30 of file dualiterator.inc.

Referenced by __construct().

DualIterator::$rhs [private]

Definition at line 31 of file dualiterator.inc.

Referenced by __construct().

Definition at line 22 of file dualiterator.inc.

Definition at line 21 of file dualiterator.inc.

Definition at line 19 of file dualiterator.inc.

Definition at line 20 of file dualiterator.inc.

Definition at line 28 of file dualiterator.inc.

const DualIterator::KEY_0 = 0x00

Definition at line 26 of file dualiterator.inc.

const DualIterator::KEY_LHS = 0x10

Definition at line 24 of file dualiterator.inc.

const DualIterator::KEY_RHS = 0x20

Definition at line 25 of file dualiterator.inc.


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