20 template<
typename Ref,
typename Value>
23 template<
typename Ref,
typename Value>
26 template<
typename Ref,
typename Value>
29 template<
typename Ref>
34 template<
typename Self,
typename Ref,
typename Value>
43 auto operator new(
usize size)
noexcept ->
void* { return ::operator
new(
size, std::nothrow); }
44 void operator delete(
void* ptr,
usize size)
noexcept { ::operator
delete(ptr,
size); }
52 template<
typename Promise>
62 m_pointer = util::addressof(value);
71 m_error = util::move(error).error();
79 template<
typename,
typename>
83 auto await_ready() noexcept ->
bool {
return false; }
85 template<
typename Promise>
89 auto was_error = current.m_error.has_value();
91 if (current.m_error == BasicError::OperationCanceled) {
92 return current.unhandled_stopped();
94 return current.unhandled_error(util::move(current.m_error).value());
97 return current.continuation() ? current.continuation() : noop_coroutine();
100 void await_resume() noexcept {}
103 struct AsyncRange : util::Immovable {
108 ~AsyncRange() noexcept {
119 template<
typename OtherPromise>
137 return *promise.m_pointer;
147 auto await_ready() noexcept ->
bool {
152 template<
typename OtherPromise>
158 auto await_resume() noexcept {
160 return AsyncRange(coroutine);
169 template<
typename Self,
typename Ref,
typename Value>
172 template<
typename Ref,
typename Value>
180 struct Promise : PromiseBase {
181 auto get_return_object()
noexcept ->
Type {
184 static auto get_return_object_on_allocation_failure()
noexcept ->
Type {
191 using Awaiter = PromiseBase::Awaiter;
204 auto operator co_await() && -> Awaiter {
207 return Awaiter {
nullptr };
209 auto& promise =
static_cast<PromiseBase&
>(handle.promise());
210 return Awaiter { ParentHandle::from_promise(promise) };
214 explicit Type(Handle handle) : m_handle(handle) {}
222template<
typename Ref,
typename Value =
void>
#define DI_ASSERT(...)
Definition assert_bool.h:7
Definition with_awaitable_senders.h:8
auto continuation() const -> CoroutineHandle<>
Definition with_awaitable_senders.h:37
Definition optional_forward_declaration.h:5
Definition unexpected.h:14
Definition operations.h:11
Definition async_generator.h:19
meta::Conditional< concepts::Reference< Ref >, Ref, Ref const & > GeneratorYield
Definition async_generator.h:30
meta::Type< PromiseBaseT< Self, Ref, Value > > PromiseBase
Definition async_generator.h:170
meta::Conditional< concepts::LanguageVoid< Value >, Ref &&, Ref > GeneratorReference
Definition async_generator.h:27
meta::Conditional< concepts::LanguageVoid< Value >, meta::RemoveCVRef< Ref >, Value > GeneratorValue
Definition async_generator.h:24
decltype(just_stopped()) Stopped
Definition just.h:90
meta::Type< async_generator_ns::AsyncGeneratorT< Ref, Value > > AsyncGenerator
Definition async_generator.h:223
size_t usize
Definition integers.h:33
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
constexpr auto exchange(T &object, U &&new_value) -> T
Definition exchange.h:8
void unreachable()
Definition unreachable.h:4
Optional(T) -> Optional< T >
constexpr auto nullopt
Definition nullopt.h:15
StatusCode< Erased< long > > Error
Definition error.h:8
Definition zstring_parser.h:9
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
constexpr auto exchange(T &object, U &&new_value) -> T
Definition exchange.h:8
std::coroutine_handle< Promise > CoroutineHandle
Definition coroutine.h:164
constexpr auto size
Definition size.h:54
std::suspend_always SuspendAlways
Definition coroutine.h:169
Defines the sequence sender concepts and related CPOs.
Definition async_generator.h:32
Definition async_generator.h:174
Type(Type &&other)
Definition async_generator.h:196
~Type()
Definition async_generator.h:198
Promise promise_type
Definition async_generator.h:194
Definition async_generator.h:173
Definition async_generator.h:114
CoroutineHandle< PromiseBase > coroutine
Definition async_generator.h:115
auto await_ready() noexcept -> bool
Definition async_generator.h:117
auto await_suspend(CoroutineHandle< OtherPromise > continuation) noexcept -> CoroutineHandle<>
Definition async_generator.h:120
auto await_resume() noexcept -> vocab::Optional< Value >
Definition async_generator.h:127
Definition async_generator.h:49
auto await_suspend(CoroutineHandle< Promise > coroutine) noexcept -> CoroutineHandle<>
Definition async_generator.h:53
void await_resume() noexcept
Definition async_generator.h:58
auto await_ready() noexcept -> bool
Definition async_generator.h:50
void return_value(vocab::Unexpected< E > &&error) noexcept
Definition async_generator.h:70
auto yield_value(Yield value) noexcept
Definition async_generator.h:61
friend struct AsyncGeneratorT
Definition async_generator.h:80
void return_value(Stopped) noexcept
Definition async_generator.h:74
auto initial_suspend() noexcept -> SuspendAlways
Definition async_generator.h:46
auto final_suspend() noexcept
Definition async_generator.h:47
void return_value(types::Void) noexcept
Definition async_generator.h:66
void unhandled_exception()
Definition async_generator.h:76
GeneratorYield< Ref > Yield
Definition async_generator.h:38
Type PromiseBase
Definition async_generator.h:37
Definition async_generator.h:35