function append(Iterator $it)
{
$this->iterators->append($it);
+ if (!$this->valid())
+ {
+ $this->iterators->seek($this->iterators->count() - 1);
+ $this->iterators->current()->rewind();
+ }
}
function getInnerIterator()
$this->iterators->rewind();
if ($this->iterators->valid())
{
- $this->iterators->rewind();
+ $this->getInnerIterator()->rewind();
}
}
--- /dev/null
+<?php
+
+/**
+ * @brief An Iterator that doesn't call rewind
+ * @author Marcus Boerger
+ * @version 1.0
+ *
+ */
+class NoRewindIterator implements Iterator
+{
+ protected $it;
+
+ function __construct(Iterator $it)
+ {
+ $this->it = $it;
+ }
+
+ function rewind()
+ {
+ // nothing to do
+ }
+
+ function valid()
+ {
+ return $this->it->valid();
+ }
+
+ function current()
+ {
+ return $this->it->current();
+ }
+
+ function key()
+ {
+ return $this->it->key();
+ }
+
+ function next()
+ {
+ $this->it->next();
+ }
+}
+
+?>
\ No newline at end of file
$classes = array(
'EmptyIterator',
'InfiniteIterator',
+ 'AppendIterator',
+ 'NoRewindIterator',
);
foreach (new IncludeFiles(dirname(__FILE__). '/..', $classes) as $file)
--- /dev/null
+--TEST--
+SPL: NoRweindIterator
+--FILE--
+<?php
+
+require_once('examples.inc');
+
+echo "===Current===\n";
+
+$it = new NoRewindIterator(new ArrayIterator(array(0 => 'A', 1 => 'B', 2 => 'C')));
+
+echo $it->key() . '=>' . $it->current() . "\n";
+
+echo "===Next===\n";
+
+$it->next();
+
+echo "===Foreach===\n";
+
+foreach($it as $key=>$val)
+{
+ echo "$key=>$val\n";
+}
+
+?>
+===DONE===
+<?php exit(0); ?>
+--EXPECTF--
+===Current===
+0=>A
+===Next===
+===Foreach===
+1=>B
+2=>C
+===DONE===
--- /dev/null
+--TEST--
+SPL: AppendIterator
+--FILE--
+<?php
+
+require_once('examples.inc');
+
+echo "===Empty===\n";
+
+$it = new AppendIterator;
+
+foreach($it as $key=>$val)
+{
+ echo "$key=>$val\n";
+}
+
+echo "===Append===\n";
+
+$it->append(new ArrayIterator(array(0 => 'A', 1 => 'B')));
+
+foreach($it as $key=>$val)
+{
+ echo "$key=>$val\n";
+}
+
+echo "===Rewind===\n";
+
+foreach($it as $key=>$val)
+{
+ echo "$key=>$val\n";
+}
+
+echo "===Append===\n";
+
+$it->append(new ArrayIterator(array(2 => 'C', 3 => 'D')));
+
+foreach(new NoRewindIterator($it) as $key=>$val)
+{
+ echo "$key=>$val\n";
+}
+
+echo "===Rewind===\n";
+
+foreach($it as $key=>$val)
+{
+ echo "$key=>$val\n";
+}
+
+?>
+===DONE===
+<?php exit(0); ?>
+--EXPECTF--
+===Empty===
+===Append===
+0=>A
+1=>B
+===Rewind===
+0=>A
+1=>B
+===Append===
+2=>C
+3=>D
+===Rewind===
+0=>A
+1=>B
+2=>C
+3=>D
+===DONE===