generator¶
ranges-compatible generator type built on C++20 coroutines.
-
template<class
T
>
classtl
::
generator
¶ A generator allows implementing sequence producers which are terse and avoid creating the whole sequence in memory.
Example:
tl::generator<int> iota(int i = 0) { while(true) { co_yield i; ++i; } }
Member Types
-
class
promise_type
¶
-
class
sentinel
¶
-
class
iterator
¶ Member Types
-
using
reference_type
= value_type&¶
-
using
pointer_type
= value_type *¶
-
using
difference_type
= std::ptrdiff_t¶
Special Members
-
iterator
() = delete¶ The iterators should only be created by tl::generator<T>::begin
-
iterator
(iterator const&)¶ -
iterator &
operator=
(iterator const&)¶ Coroutine handles point to a unique resource, so the iterators are not copyable.
-
iterator
(generator &&rhs) noexcept¶ -
iterator &
operator=
(generator &&rhs) noexcept¶ Takes the coroutine handle from rhs, making rhs not tied to a coroutine.
Member Functions
-
friend bool
operator==
(iterator const &it, sentinel) noexcept¶ Returns true if the iterator has been moved from, or if the coroutine it is tied to has completed.
-
iterator &
operator++
()¶ -
void
operator++
(int)¶ Resumes the coroutine until return/co_yield/exception and returns an iterator which can be used to retrieve the yielded value and drive the coroutine forward again.
Rethrows the exception if one occurred.
-
reference_type
operator*
()¶ Returns the last value yielded.
-
using
-
using
promise_type
= promise
-
using
handle_type
= std::coroutine_handle<promise_type>¶
Special Members
-
generator
()¶ Creates a generator which is not tied to a coroutine.
-
generator
(generator const&) = delete¶ -
generator &
operator=
(generator const&) = delete¶ Coroutine handles point to a unique resource, so generators are not copyable.
-
generator
(generator &&rhs) noexcept¶ -
generator &
operator=
(generator &&rhs) noexcept¶ Takes the coroutine handle from rhs, making rhs not tied to a coroutine.
Member Functions
-
class
-
template <class T> inline constexpr bool std::ranges::enable_view<tl::generator<T>> = true
tl::generator<T> is a view.