|
JH-Toolkit v1.4.1
An engineering-oriented C++20 toolkit with duck-typed concepts, static design, async coroutines, and semantic containers — header-only, RTTI-free, and concurrency-friendly.
|
A range-like wrapper that enables iteration over a generator factory. More...
#include <jh/asynchronous/generator.h>
Classes | |
| class | iterator |
Public Types | |
| using | generator_factory_t = std::function<generator<T>()> |
Public Member Functions | |
| generator_range (generator_factory_t factory) | |
| iterator | begin () const |
Static Public Member Functions | |
| static std::default_sentinel_t | end () noexcept |
A range-like wrapper that enables iteration over a generator factory.
generator_range<T> provides a repeatable and range-compatible interface for coroutine-based generators. Instead of storing a single generator instance (which would be consumed after one iteration), it holds a factory function that can produce a fresh jh::async::generator<T> each time.
The factory must have one of the following signatures:
jh::async::generator<T> func() [...]() -> jh::async::generator<T> { ... } (lambda expression) This mechanism enforces U == typed::monostate, meaning the generator cannot depend on external send() input values. The resulting range can thus be freely iterated and reused.
begin() constructs a new generator instance via the stored factory. std::ranges and STL algorithms. for(auto v : range), std::views::zip(...), and similar constructs. T must be copyable. [...] capture). Passing parameterized generators must be done by creating multiple distinct factories.| T | The yielded value type of the underlying jh::async::generator. |