#include <optional> | #include <optional> | ||||
#include <thread> | #include <thread> | ||||
#include <cassert> | #include <cassert> | ||||
#ifdef __cpp_impl_coroutine | |||||
#include <coroutine> | |||||
#ifdef _MSC_VER | |||||
extern "C" size_t _coro_frame_size(); | |||||
extern "C" void* _coro_frame_ptr(); | |||||
extern "C" void _coro_init_block(); | |||||
extern "C" void* _coro_resume_addr(); | |||||
extern "C" void _coro_init_frame(void*); | |||||
extern "C" void _coro_save(size_t); | |||||
extern "C" void _coro_suspend(size_t); | |||||
extern "C" void _coro_cancel(); | |||||
extern "C" void _coro_resume_block(); | |||||
#pragma intrinsic(_coro_frame_size) | |||||
#pragma intrinsic(_coro_frame_ptr) | |||||
#pragma intrinsic(_coro_init_block) | |||||
#pragma intrinsic(_coro_resume_addr) | |||||
#pragma intrinsic(_coro_init_frame) | |||||
#pragma intrinsic(_coro_save) | |||||
#pragma intrinsic(_coro_suspend) | |||||
#pragma intrinsic(_coro_cancel) | |||||
#pragma intrinsic(_coro_resume_block) | |||||
#endif | |||||
#else | |||||
#include <experimental/coroutine> | #include <experimental/coroutine> | ||||
#endif | |||||
#include "src/stop_token.hpp" | #include "src/stop_token.hpp" | ||||
#define LIB_RESUMEF_VERSION 30000 // 3.0.0 | #define LIB_RESUMEF_VERSION 30000 // 3.0.0 | ||||
#ifndef __cpp_impl_coroutine | |||||
namespace std | namespace std | ||||
{ | { | ||||
using experimental::coroutine_traits; | using experimental::coroutine_traits; | ||||
using experimental::suspend_always; | using experimental::suspend_always; | ||||
using experimental::suspend_never; | using experimental::suspend_never; | ||||
} | } | ||||
#endif | |||||
namespace resumef | namespace resumef | ||||
{ | { |
} | } | ||||
template<class _PromiseT/*, typename = std::enable_if_t<traits::is_promise_v<_PromiseT>>*/> | template<class _PromiseT/*, typename = std::enable_if_t<traits::is_promise_v<_PromiseT>>*/> | ||||
void await_suspend(coroutine_handle<_PromiseT> handler) | |||||
void await_suspend(coroutine_handle<_PromiseT> handler) const | |||||
{ | { | ||||
_state->future_await_suspend(handler); | _state->future_await_suspend(handler); | ||||
} | } |
//ref_state()->set_exception(std::move(e)); | //ref_state()->set_exception(std::move(e)); | ||||
std::terminate(); | std::terminate(); | ||||
} | } | ||||
#if defined(__clang__) || defined(__GNUC__) | |||||
#if defined(__cpp_impl_coroutine) || defined(__clang__) || defined(__GNUC__) | |||||
void unhandled_exception() | void unhandled_exception() | ||||
{ | { | ||||
//this->ref_state()->set_exception(std::current_exception()); | //this->ref_state()->set_exception(std::current_exception()); |
<Optimization>Disabled</Optimization> | <Optimization>Disabled</Optimization> | ||||
<PreprocessorDefinitions>_WIN32_WINNT=0x0601;_CONSOLE;ASIO_STANDALONE;_SILENCE_CXX17_ALLOCATOR_VOID_DEPRECATION_WARNING=1;ASIO_DISABLE_CONCEPTS=1;RESUMEF_ENABLE_MULT_SCHEDULER=1;RESUMEF_DEBUG_COUNTER=0;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> | <PreprocessorDefinitions>_WIN32_WINNT=0x0601;_CONSOLE;ASIO_STANDALONE;_SILENCE_CXX17_ALLOCATOR_VOID_DEPRECATION_WARNING=1;ASIO_DISABLE_CONCEPTS=1;RESUMEF_ENABLE_MULT_SCHEDULER=1;RESUMEF_DEBUG_COUNTER=0;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
<AdditionalIncludeDirectories>..\librf;..\..\asio\asio\include;..\..\asio-1.10.6\include;..\modern_cb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | <AdditionalIncludeDirectories>..\librf;..\..\asio\asio\include;..\..\asio-1.10.6\include;..\modern_cb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | ||||
<AdditionalOptions>/await</AdditionalOptions> | |||||
<AdditionalOptions> | |||||
</AdditionalOptions> | |||||
<MultiProcessorCompilation>true</MultiProcessorCompilation> | <MultiProcessorCompilation>true</MultiProcessorCompilation> | ||||
<LanguageStandard>stdcpplatest</LanguageStandard> | <LanguageStandard>stdcpplatest</LanguageStandard> | ||||
<CLanguageStandard>c11</CLanguageStandard> | <CLanguageStandard>c11</CLanguageStandard> |