diff options
author | SVN Migration <svn@php.net> | 2006-10-15 21:09:28 +0000 |
---|---|---|
committer | SVN Migration <svn@php.net> | 2006-10-15 21:09:28 +0000 |
commit | 88ec761548b66f58acc1a86cdd0fc164ca925476 (patch) | |
tree | d0af978fa00d83bb1d82c613f66477fbd6bb18aa /ext/spl/examples/dualiterator.inc | |
parent | 268984b4787e797db6054313fc9ba3b9e845306e (diff) | |
download | php-git-PECL_OPENSSL.tar.gz |
This commit was manufactured by cvs2svn to create branch 'PECL_OPENSSL'.PECL_OPENSSL
Diffstat (limited to 'ext/spl/examples/dualiterator.inc')
-rwxr-xr-x | ext/spl/examples/dualiterator.inc | 212 |
1 files changed, 0 insertions, 212 deletions
diff --git a/ext/spl/examples/dualiterator.inc b/ext/spl/examples/dualiterator.inc deleted file mode 100755 index 544034856a..0000000000 --- a/ext/spl/examples/dualiterator.inc +++ /dev/null @@ -1,212 +0,0 @@ -<?php - -/** @file dualiterator.inc - * @ingroup Examples - * @brief class DualIterator - * @author Marcus Boerger - * @date 2003 - 2006 - * - * SPL - Standard PHP Library - */ - -/** @ingroup Examples - * @brief Synchronous iteration over two iterators - * @author Marcus Boerger - * @version 1.1 - */ -class DualIterator implements Iterator -{ - const CURRENT_LHS = 0x01; - const CURRENT_RHS = 0x02; - const CURRENT_ARRAY = 0x03; - const CURRENT_0 = 0x00; - - const KEY_LHS = 0x10; - const KEY_RHS = 0x20; - const KEY_ARRAY = 0x30; - const KEY_0 = 0x00; - - const DEFAULT_FLAGS = 0x33; - - private $lhs; - private $rhs; - private $flags; - - /** construct iterator from two iterators - * - * @param lhs Left Hand Side Iterator - * @param rhs Right Hand Side Iterator - * @param flags iteration flags - */ - function __construct(Iterator $lhs, Iterator $rhs, - $flags = 0x33 /*DualIterator::DEFAULT_FLAGS*/) - { - $this->lhs = $lhs; - $this->rhs = $rhs; - $this->flags = $flags; - } - - /** @return Left Hand Side Iterator - */ - function getLHS() - { - return $this->lhs; - } - - /** @return Right Hand Side Iterator - */ - function getRHS() - { - return $this->rhs; - } - - /** @param flags new flags - */ - function setFlags($flags) - { - $this->flags = $flags; - } - - /** @return current flags - */ - function getFlags() - { - return $this->flags; - } - - /** rewind both inner iterators - */ - function rewind() - { - $this->lhs->rewind(); - $this->rhs->rewind(); - } - - /** @return whether both inner iterators are valid - */ - function valid() - { - return $this->lhs->valid() && $this->rhs->valid(); - } - - /** @return current value depending on CURRENT_* flags - */ - function current() - { - 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; - } - } - - /** @return current value depending on KEY_* flags - */ - function key() - { - switch($this->flags & 0xF0) - { - default: - case self::CURRENT_ARRAY: - return array($this->lhs->key(), $this->rhs->key()); - case self::CURRENT_LHS: - return $this->lhs->key(); - case self::CURRENT_RHS: - return $this->rhs->key(); - case self::CURRENT_0: - return NULL; - } - } - - /** move both inner iterators forward - */ - function next() - { - $this->lhs->next(); - $this->rhs->next(); - } - - /** @return whether both inner iterators are valid and have identical - * current and key values or both are non valid. - */ - function areIdentical() - { - return $this->valid() - ? $this->lhs->current() === $this->rhs->current() - && $this->lhs->key() === $this->rhs->key() - : $this->lhs->valid() == $this->rhs->valid(); - } - - /** @return whether both inner iterators are valid and have equal current - * and key values or both are non valid. - */ - function areEqual() - { - return $this->valid() - ? $this->lhs->current() == $this->rhs->current() - && $this->lhs->key() == $this->rhs->key() - : $this->lhs->valid() == $this->rhs->valid(); - } - - /** Compare two iterators - * - * @param lhs Left Hand Side Iterator - * @param rhs Right Hand Side Iterator - * @param identical whether to use areEqual() or areIdentical() - * @return 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. - */ - static function compareIterators(Iterator $lhs, Iterator $rhs, - $identical = false) - { - if ($lhs instanceof RecursiveIterator) - { - if ($rhs instanceof RecursiveIterator) - { - $it = new RecursiveDualIterator($lhs, $rhs, - self::CURRENT_0 | self::KEY_0); - } - else - { - return false; - } - } - else - { - $it = new DualIterator($lhs, $rhs, self::CURRENT_0 | self::KEY_0); - } - - if ($identical) - { - foreach(new RecursiveIteratorIterator($it) as $n) - { - if (!$it->areIdentical()) - { - return false; - } - } - } - else - { - foreach($it as $n) - { - if (!$it->areEqual()) - { - return false; - } - } - } - return $identical ? $it->areIdentical() : $it->areEqual(); - } -} - -?> |