#pragma once | #pragma once | ||||
#include <atomic> | |||||
#include <chrono> | |||||
#include <array> | |||||
#include <vector> | |||||
#include <deque> | |||||
#include <mutex> | |||||
#include <map> | |||||
#include <list> | |||||
#include <any> | |||||
#include <unordered_map> | |||||
#include <functional> | |||||
#include <optional> | |||||
#include <thread> | |||||
#include <iostream> | |||||
#include <assert.h> | |||||
#include <experimental/coroutine> | |||||
#include "src/def.h" | |||||
#include "src/spinlock.h" | |||||
#include "src/counted_ptr.h" | |||||
#include "src/state.h" | |||||
#include "src/future.h" | #include "src/future.h" | ||||
#include "src/promise.h" | |||||
#include "src/awaitable.h" | #include "src/awaitable.h" | ||||
#include "src/event.h" | |||||
#include "src/mutex.h" | |||||
#include "src/channel.h" | |||||
#include "src/rf_task.h" | |||||
#include "src/utils.h" | |||||
#include "src/timer.h" | |||||
#include "src/scheduler.h" | #include "src/scheduler.h" | ||||
#include "src/promise.inl" | #include "src/promise.inl" | ||||
#include "src/state.inl" | #include "src/state.inl" | ||||
#include "src/_awaker.h" | |||||
#include "src/event.h" | |||||
#include "src/mutex.h" | |||||
#include "src/channel.h" | |||||
#include "src/generator.h" | #include "src/generator.h" | ||||
#include "src/sleep.h" | #include "src/sleep.h" | ||||
#include "src/when.h" | #include "src/when.h" | ||||
#pragma once | #pragma once | ||||
#include "spinlock.h" | |||||
#include "future.h" | |||||
RESUMEF_NS | RESUMEF_NS | ||||
{ | { | ||||
namespace detail | namespace detail |
#pragma once | #pragma once | ||||
#include "_awaker.h" | |||||
RESUMEF_NS | RESUMEF_NS | ||||
{ | { | ||||
namespace detail | namespace detail |
#pragma once | #pragma once | ||||
#include <atomic> | |||||
#include <chrono> | |||||
#include <vector> | |||||
#include <deque> | |||||
#include <mutex> | |||||
#include <map> | |||||
#include <list> | |||||
#include <unordered_map> | |||||
#include <functional> | |||||
#include <optional> | |||||
#include <thread> | |||||
#include <assert.h> | |||||
#include <experimental/coroutine> | |||||
#define LIB_RESUMEF_VERSION 200103 // 2.1.3 | #define LIB_RESUMEF_VERSION 200103 // 2.1.3 | ||||
#if defined(RESUMEF_MODULE_EXPORT) | #if defined(RESUMEF_MODULE_EXPORT) |
#include "event.h" | |||||
#include <assert.h> | |||||
#include "scheduler.h" | |||||
#include "awaitable.h" | |||||
#include "state.inl" | |||||
#include "../librf.h" | |||||
RESUMEF_NS | RESUMEF_NS | ||||
{ | { |
#pragma once | #pragma once | ||||
#include "_awaker.h" | |||||
RESUMEF_NS | RESUMEF_NS | ||||
{ | { | ||||
namespace detail | namespace detail |
| | ||||
#pragma once | #pragma once | ||||
#include "state.h" | |||||
RESUMEF_NS | RESUMEF_NS | ||||
{ | { | ||||
template<class _Ty> | template<class _Ty> |
#include "mutex.h" | |||||
#include <assert.h> | |||||
#include "scheduler.h" | |||||
#include "awaitable.h" | |||||
#include "state.inl" | |||||
#include "../librf.h" | |||||
RESUMEF_NS | RESUMEF_NS | ||||
{ | { |
#pragma once | #pragma once | ||||
#include "_awaker.h" | |||||
RESUMEF_NS | RESUMEF_NS | ||||
{ | { | ||||
namespace detail | namespace detail |
#pragma once | #pragma once | ||||
#include "state.h" | |||||
#pragma push_macro("new") | #pragma push_macro("new") | ||||
#undef new | #undef new | ||||
struct promise_t final : public promise_impl_t<_Ty> | struct promise_t final : public promise_impl_t<_Ty> | ||||
{ | { | ||||
using typename promise_impl_t<_Ty>::value_type; | using typename promise_impl_t<_Ty>::value_type; | ||||
using promise_impl_t<_Ty>::get_return_object; | |||||
void return_value(value_type val); | void return_value(value_type val); | ||||
void yield_value(value_type val); | void yield_value(value_type val); | ||||
template<> | template<> | ||||
struct promise_t<void> final : public promise_impl_t<void> | struct promise_t<void> final : public promise_impl_t<void> | ||||
{ | { | ||||
using promise_impl_t<void>::get_return_object; | |||||
void return_void(); | void return_void(); | ||||
void yield_value(); | void yield_value(); | ||||
}; | }; |
#pragma once | |||||
| |||||
RESUMEF_NS | RESUMEF_NS | ||||
{ | { | ||||
struct suspend_on_initial | struct suspend_on_initial | ||||
template<class _Ty> | template<class _Ty> | ||||
inline void promise_t<_Ty>::return_value(value_type val) | |||||
inline void promise_t<_Ty>::return_value(_Ty val) | |||||
{ | { | ||||
this->get_state()->set_value(std::move(val)); | this->get_state()->set_value(std::move(val)); | ||||
} | } |
| |||||
#include "rf_task.h" | |||||
#include "scheduler.h" | |||||
#include <assert.h> | |||||
#include "../librf.h" | |||||
RESUMEF_NS | RESUMEF_NS | ||||
{ | { |
#pragma once | #pragma once | ||||
#include "def.h" | |||||
#include "future.h" | |||||
#include "promise.h" | |||||
RESUMEF_NS | RESUMEF_NS | ||||
{ | { | ||||
struct task_base_t; | struct task_base_t; |
#include "scheduler.h" | |||||
#include <assert.h> | |||||
#include "../librf.h" | |||||
#if RESUMEF_DEBUG_COUNTER | #if RESUMEF_DEBUG_COUNTER | ||||
std::mutex g_resumef_cout_mutex; | std::mutex g_resumef_cout_mutex; |
| |||||
#pragma once | |||||
#include <array> | |||||
#include <vector> | |||||
//#include <yvals.h> | |||||
#include "rf_task.h" | |||||
#include "utils.h" | |||||
#include "timer.h" | |||||
#pragma once | |||||
RESUMEF_NS | RESUMEF_NS | ||||
{ | { |
#include "scheduler.h" | |||||
#include "awaitable.h" | |||||
#include "sleep.h" | |||||
#include "../librf.h" | |||||
RESUMEF_NS | RESUMEF_NS | ||||
{ | { |
| |||||
//用于内部实现的循环锁 | |||||
//用于内部实现的循环锁 | |||||
#pragma once | #pragma once | ||||
#include "def.h" | |||||
RESUMEF_NS | RESUMEF_NS | ||||
{ | { | ||||
struct spinlock | struct spinlock |
| |||||
#include "rf_task.h" | |||||
#include "scheduler.h" | |||||
#include <assert.h> | |||||
#include "../librf.h" | |||||
RESUMEF_NS | RESUMEF_NS | ||||
{ | { |
| |||||
#pragma once | |||||
#include "def.h" | |||||
#include "spinlock.h" | |||||
#include "counted_ptr.h" | |||||
#include <iostream> | |||||
#pragma once | |||||
RESUMEF_NS | RESUMEF_NS | ||||
{ | { |
#pragma once | |||||
| |||||
RESUMEF_NS | RESUMEF_NS | ||||
{ | { | ||||
template<class _PromiseT, typename _Enable> | template<class _PromiseT, typename _Enable> |
#include "timer.h" | |||||
#include "../librf.h" | |||||
RESUMEF_NS | RESUMEF_NS | ||||
{ | { |
#pragma once | #pragma once | ||||
#include "def.h" | |||||
RESUMEF_NS | RESUMEF_NS | ||||
{ | { | ||||
struct timer_manager; | struct timer_manager; |
#include "_awaker.h" | |||||
#include "when.h" | |||||
#include <assert.h> | |||||
#include "../librf.h" | |||||
RESUMEF_NS | RESUMEF_NS | ||||
{ | { |
#pragma once | #pragma once | ||||
#include <any> | |||||
RESUMEF_NS | RESUMEF_NS | ||||
{ | { | ||||
using any_t = std::any; | using any_t = std::any; | ||||
using std::any_cast; | using std::any_cast; | ||||
} | } | ||||
#include "_awaker.h" | |||||
#include "promise.h" | |||||
#include "promise.inl" | |||||
#include "awaitable.h" | |||||
//纠结过when_any的返回值,是选用index + std::any,还是选用std::variant<>。最终选择了std::any。 | //纠结过when_any的返回值,是选用index + std::any,还是选用std::variant<>。最终选择了std::any。 | ||||
//std::variant<>存在第一个元素不能默认构造的问题,需要使用std::monostate来占位,导致下标不是从0开始。 | //std::variant<>存在第一个元素不能默认构造的问题,需要使用std::monostate来占位,导致下标不是从0开始。 | ||||
//而且,std::variant<>里面存在类型重复的问题,好几个操作都是病态的 | //而且,std::variant<>里面存在类型重复的问题,好几个操作都是病态的 |