From b71f9a58a9af53b097aeca2d84413544695643ea Mon Sep 17 00:00:00 2001 From: Julian Blake Kongslie Date: Sat, 25 Jun 2022 20:56:30 -0700 Subject: Include what you use. --- aisa/coroutine.h | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) (limited to 'aisa/coroutine.h') diff --git a/aisa/coroutine.h b/aisa/coroutine.h index a456c89..333cb26 100644 --- a/aisa/coroutine.h +++ b/aisa/coroutine.h @@ -1,46 +1,47 @@ #pragma once #include +#include namespace aisa { - template struct promise; + template struct task_promise; - template struct task : public std::coroutine_handle> { - using handle = std::coroutine_handle>; - using promise_type = struct promise; + template struct task : public std::coroutine_handle> { + using handle = std::coroutine_handle>; + using promise_type = task_promise; bool await_ready() const noexcept { return handle::done(); } result_t await_resume() const noexcept; - template void await_suspend(std::coroutine_handle> h) const noexcept; + template void await_suspend(std::coroutine_handle> h) const noexcept; std::optional operator()() noexcept; }; - template<> struct task : public std::coroutine_handle> { - using handle = std::coroutine_handle>; - using promise_type = struct promise; + template<> struct task : public std::coroutine_handle> { + using handle = std::coroutine_handle>; + using promise_type = task_promise; bool await_ready() const noexcept { return handle::done(); } void await_resume() const noexcept; - template void await_suspend(std::coroutine_handle> h) const noexcept; + template void await_suspend(std::coroutine_handle> h) const noexcept; bool operator()() noexcept; }; - template struct promise { + template struct task_promise { std::coroutine_handle<> precursor; std::optional result; - promise() = default; - promise(const promise &) = delete; - task get_return_object() noexcept { return task{std::coroutine_handle>::from_promise(*this)}; } + task_promise() = default; + task_promise(const task_promise &) = delete; + task get_return_object() noexcept { return task{std::coroutine_handle>::from_promise(*this)}; } std::suspend_never initial_suspend() const noexcept { return {}; } std::suspend_always final_suspend() const noexcept { return {}; } void unhandled_exception() { } void return_value(result_t x) noexcept { result = std::move(x); } }; - template<> struct promise { + template<> struct task_promise { std::coroutine_handle<> precursor; - promise() = default; - promise(const promise &) = delete; - task get_return_object() noexcept { return task{std::coroutine_handle>::from_promise(*this)}; } + task_promise() = default; + task_promise(const task_promise &) = delete; + task get_return_object() noexcept { return task{std::coroutine_handle>::from_promise(*this)}; } std::suspend_never initial_suspend() const noexcept { return {}; } std::suspend_always final_suspend() const noexcept { return {}; } void unhandled_exception() { } @@ -54,7 +55,7 @@ namespace aisa { return std::move(x); } - template template void task::await_suspend(std::coroutine_handle> h) const noexcept + template template void task::await_suspend(std::coroutine_handle> h) const noexcept { h.promise().precursor = *this; } @@ -87,7 +88,7 @@ namespace aisa { handle::destroy(); } - template void task::await_suspend(std::coroutine_handle> h) const noexcept + template void task::await_suspend(std::coroutine_handle> h) const noexcept { h.promise().precursor = *this; } -- cgit v1.2.3