Provides a simple adapter to make generators rewindable
PHP
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
src
tests
.gitignore
.scrutinizer.yml
.travis.yml
README.md
composer.json
phpcs.xml
phpmd.xml
phpunit.xml.dist

README.md

Rewindable Generator

Build Status Scrutinizer Code Quality Code Coverage Latest Stable Version Download count

Provides a simple adapter to make generators rewindable.

Unfortunately, you cannot do this:

$generator = $myGeneratorFunction();
iterator_to_array($generator);
iterator_to_array($generator); // boom!

Or this:

$generator = $myGeneratorFunction();
$generator->next();
$generator->rewind(); // boom!

Both result in an Exception, as proven by the tests in tests/GeneratorTest.php. This library provides a simple class that takes a generator function (the function, not its return value) and adapts it to a rewindable Iterator.

$generator = new RewindableGenerator($myGeneratorFunction);
iterator_to_array($generator);
iterator_to_array($generator); // works as expected
$generator->rewind(); // works as expected

System dependencies

  • PHP 5.5 or later, including PHP 7 (and probably HHVM)

Installation

To add this package as a local, per-project dependency to your project, simply add a dependency on jeroen/rewindable-generator to your project's composer.json file. Here is a minimal example of a composer.json file that just defines a dependency on Rewindable Generator 1.x:

{
    "require": {
        "jeroen/rewindable-generator": "~1.0"
    }
}

Running the tests

For tests only

composer test

For style checks only

composer cs

For a full CI run

composer ci

Release notes

Version 1.1.1 (2015-11-08)

Version 1.1.0 (2015-11-08)

  • Added onRewind function and second constructor parameter to RewindableGenerator

Version 1.0.0 (2015-11-08)