mirror of
https://github.com/php/php-src.git
synced 2024-10-22 08:47:29 +00:00
73 lines
1.8 KiB
PHP
Executable File
73 lines
1.8 KiB
PHP
Executable File
<?php
|
|
|
|
/** @file recursivedualiterator.inc
|
|
* @ingroup Examples
|
|
* @brief class RecursiveDualIterator
|
|
* @author Marcus Boerger
|
|
* @date 2003 - 2006
|
|
*
|
|
* SPL - Standard PHP Library
|
|
*/
|
|
|
|
/** @ingroup Examples
|
|
* @brief Synchronous iteration over two recursive iterators
|
|
* @author Marcus Boerger
|
|
* @version 1.0
|
|
*/
|
|
class RecursiveDualIterator extends DualIterator implements RecursiveIterator
|
|
{
|
|
private $ref;
|
|
|
|
/** construct iterator from two RecursiveIterator instances
|
|
*
|
|
* @param lhs Left Hand Side Iterator
|
|
* @param rhs Right Hand Side Iterator
|
|
* @param flags iteration flags
|
|
*/
|
|
function __construct(RecursiveIterator $lhs, RecursiveIterator $rhs,
|
|
$flags = 0x33 /*DualIterator::DEFAULT_FLAGS*/)
|
|
{
|
|
parent::__construct($lhs, $rhs, $flags);
|
|
}
|
|
|
|
/** @return whether both LHS and RHS have children
|
|
*/
|
|
function hasChildren()
|
|
{
|
|
return $this->getLHS()->hasChildren() && $this->getRHS()->hasChildren();
|
|
}
|
|
|
|
/** @return new RecursiveDualIterator (late binding) for the two inner
|
|
* iterators current children.
|
|
*/
|
|
function getChildren()
|
|
{
|
|
if (empty($this->ref))
|
|
{
|
|
$this->ref = new ReflectionClass($this);
|
|
}
|
|
return $this->ref->newInstance(
|
|
$this->getLHS()->getChildren(), $this->getRHS()->getChildren(), $this->getFlags());
|
|
}
|
|
|
|
/** @return whether both inner iterators are valid, have same hasChildren()
|
|
* state and identical current and key values or both are non valid.
|
|
*/
|
|
function areIdentical()
|
|
{
|
|
return $this->getLHS()->hasChildren() === $this->getRHS()->hasChildren()
|
|
&& parent::areIdentical();
|
|
}
|
|
|
|
/** @return whether both inner iterators are valid, have same hasChildren()
|
|
* state and equal current and key values or both are invalid.
|
|
*/
|
|
function areEqual()
|
|
{
|
|
return $this->getLHS()->hasChildren() === $this->getRHS()->hasChildren()
|
|
&& parent::areEqual();
|
|
}
|
|
}
|
|
|
|
?>
|