39 auto yield_value(std::remove_reference_t<T>& value)
noexcept {
40 m_value = std::addressof(value);
41 return std::suspend_always{};
44 auto yield_value(std::remove_reference_t<T>&& value)
noexcept {
45 m_value = std::addressof(value);
46 return std::suspend_always{};
55 return Generator{std::coroutine_handle<promise_type>::from_promise(*
this)};
60 using handle_type = std::coroutine_handle<promise_type>;
63 explicit Generator(handle_type coro) noexcept : coro_(coro) {}
68 if (coro_) coro_.destroy();
74 if (coro_) coro_.destroy();
75 coro_ = std::exchange(other.coro_, {});
90 using reference = std::conditional_t<std::is_reference_v<T>, T, T&>;
91 using pointer = std::add_pointer_t<value_type>;
94 explicit
iterator(handle_type coro) noexcept : coro_(coro) {}
98 if (coro_.done()) coro_ = {};
104 return static_cast<reference>(*coro_.promise().m_value);
116 if (coro_.done())
return iterator{};
iterator() noexcept=default
reference operator*() const noexcept
Definition gen.hpp:103
std::conditional_t< std::is_reference_v< T >, T, T & > reference
Definition gen.hpp:90
pointer operator->() const noexcept
Definition gen.hpp:107
std::add_pointer_t< value_type > pointer
Definition gen.hpp:91
bool operator==(const iterator &other) const noexcept
Definition gen.hpp:109
iterator & operator++()
Definition gen.hpp:96
void operator++(int)
Definition gen.hpp:101
bool operator!=(const iterator &other) const noexcept
Definition gen.hpp:110
std::input_iterator_tag iterator_category
Definition gen.hpp:87
std::ptrdiff_t difference_type
Definition gen.hpp:89
std::remove_reference_t< T > value_type
Definition gen.hpp:88
Minimal generator using C++20 coroutines.
Definition gen.hpp:30
Generator() noexcept=default
Generator & operator=(Generator &&other) noexcept
Definition gen.hpp:72
Generator(const Generator &)=delete
iterator begin()
Definition gen.hpp:113
Generator(Generator &&other) noexcept
Definition gen.hpp:71
Generator & operator=(const Generator &)=delete
iterator end() noexcept
Definition gen.hpp:120
Python-like utilities and data structures for C++.
Definition dict.hpp:18
std::conditional_t< std::is_reference_v< T >, T, T & > reference_type
Definition gen.hpp:34
pointer_type m_value
Definition gen.hpp:37
auto final_suspend() noexcept
Definition gen.hpp:50
auto get_return_object() noexcept
Definition gen.hpp:54
std::remove_reference_t< T > value_type
Definition gen.hpp:33
value_type * pointer_type
Definition gen.hpp:35
void unhandled_exception() noexcept
Definition gen.hpp:52
auto yield_value(std::remove_reference_t< T > &value) noexcept
Definition gen.hpp:39
auto initial_suspend() noexcept
Definition gen.hpp:49
auto yield_value(std::remove_reference_t< T > &&value) noexcept
Definition gen.hpp:44
void return_void() noexcept
Definition gen.hpp:51