An iterator that allows rewinding over a generator by caching its values.
Description
This class wraps a generator or a closure returning a generator, enabling multiple iterations over the generated sequence by caching its results.
Usage Example:
Description
Using a Generator
use FastForward\Iterator\GeneratorRewindableIterator;
$iterator = new GeneratorRewindableIterator(
(function () {
yield 'A';
yield 'B';
yield 'C';
})()
);
foreach ($iterator as $value) {
echo $value; // Outputs: A B C
}
foreach ($iterator as $value) {
echo $value; // Outputs: A B C (rewound)
}
Description
Using a Callable that Returns a Generator
use FastForward\Iterator\GeneratorRewindableIterator;
$iterator = new GeneratorRewindableIterator(fn () => (function () {
yield 1;
yield 2;
yield 3;
})());
foreach ($iterator as $value) {
echo $value; // Outputs: 1 2 3
}
foreach ($iterator as $value) {
echo $value; // Outputs: 1 2 3 (rewound)
}
Note: This implementation ensures that the generator can be rewound
by caching its results using GeneratorCachingIteratorAggregate.
Properties
Methods
Initializes the GeneratorRewindableIterator with a generator or a closure returning a generator.
Counts the number of elements available in the iterator.
Retrieves the current element from the iterator.
Retrieves the key of the current element.
Advances the iterator to the next element.
Rewinds the iterator to the beginning.
Checks if the current iterator position is valid.
Initializes the GeneratorRewindableIterator with a generator or a closure returning a generator.
public
__construct(Closure|Generator
$generator) : mixed
Parameters
$generator
:
Closure|Generator
Description
a generator instance or a callable that returns a generator
Counts the number of elements available in the iterator.
public
count() : int
Description
This method MUST count the elements by iterating over a clone of the current iterator instance so that the active iterator state of the original object is not modified during the counting process. Concrete implementations SHOULD therefore remain safely cloneable whenever this behavior is expected to be used.
Return values
Description
the total number of elements exposed by the iterator
Retrieves the current element from the iterator.
public
current() : mixed
Return values
Description
the current element
Retrieves the key of the current element.
public
key() : mixed
Return values
Description
the key associated with the current element
Advances the iterator to the next element.
public
next() : void
Rewinds the iterator to the beginning.
public
rewind() : void
Description
This method creates a new IteratorIterator instance wrapping the
GeneratorCachingIteratorAggregate, ensuring that the generator can be reused.
Checks if the current iterator position is valid.
public
valid() : bool
Return values
Description
true if the current position is valid, false otherwise