From a85040b0c2d2936ec65a81bdebdea586e90b7159 Mon Sep 17 00:00:00 2001 From: Denis Blank Date: Thu, 28 Dec 2017 05:26:29 +0100 Subject: [PATCH] Basic skeleton for coroutine_traits --- include/continuable/detail/awaiting.hpp | 34 +++++++++++++++++++++++ test/unit-test/test-continuable-await.cpp | 11 ++++++++ 2 files changed, 45 insertions(+) diff --git a/include/continuable/detail/awaiting.hpp b/include/continuable/detail/awaiting.hpp index 7aeb86e..ef6721b 100644 --- a/include/continuable/detail/awaiting.hpp +++ b/include/continuable/detail/awaiting.hpp @@ -41,6 +41,7 @@ #include #include #include +#include #include #include #include @@ -176,5 +177,38 @@ auto create_awaiter(T&& continuable) { } // namespace detail } // namespace cti +namespace std { +namespace experimental { +template +struct coroutine_traits< + cti::continuable_base>, + FunctionArgs...> /*{ + struct promise_type { + // boost::promise p; + auto get_return_object() { + // return p.get_future(); + } + suspend_always initial_suspend() { + return {}; + } + suspend_never final_suspend() { + return {}; + } + void set_exception(std::exception_ptr e) { + // p.set_exception(std::move(e)); + } + void unhandled_exception() { + // p.set_exception(std::current_exception()); + } + template + void return_value(U&& u) { + // p.set_value(std::forward(u)); + } + }; +}*/; +} // namespace experimental +} // namespace std + #endif // CONTINUABLE_HAS_EXPERIMENTAL_COROUTINE #endif // CONTINUABLE_DETAIL_UTIL_HPP_INCLUDED__ diff --git a/test/unit-test/test-continuable-await.cpp b/test/unit-test/test-continuable-await.cpp index 9e87407..aed1e78 100644 --- a/test/unit-test/test-continuable-await.cpp +++ b/test/unit-test/test-continuable-await.cpp @@ -117,6 +117,17 @@ TYPED_TEST(single_dimension_tests, are_awaitable_with_exceptions) { }))); } +// TODO Implement this later +// +// static cti::continuable async_await() { +// co_await cti::make_continuable([](auto&& promise) { +// ... +// promise.set_value(); +// }); +// +// co_return 1; +// } + #endif // CONTINUABLE_WITH_NO_EXCEPTIONS #endif // CONTINUABLE_HAS_EXPERIMENTAL_COROUTINE