10 struct scheduler_t :
public std::enable_shared_from_this<scheduler_t>
14 using state_vector = std::vector<state_sptr>;
16 using task_dictionary_type = std::unordered_map<state_base_t*, std::unique_ptr<task_base_t>>;
19 state_vector _runing_states;
20 state_vector _cached_states;
23 task_dictionary_type _ready_task;
27 void new_task(task_base_t* task);
53 #ifndef DOXYGEN_SKIP_PROPERTY
54 COMMA_RESUMEF_ENABLE_IF(traits::is_callable_v<_Ty> || traits::is_future_v<_Ty> || traits::is_generator_v<_Ty>)
55 #endif //DOXYGEN_SKIP_PROPERTY
57 #ifndef DOXYGEN_SKIP_PROPERTY
58 RESUMEF_REQUIRES(traits::is_callable_v<_Ty> || traits::is_future_v<_Ty> || traits::is_generator_v<_Ty>)
59 #endif //DOXYGEN_SKIP_PROPERTY
62 if constexpr (traits::is_callable_v<_Ty>)
63 new_task(
new ctx_task_t<_Ty>(coro));
77 scoped_lock<spinlock, spinlock> __guard(_lock_ready, _lock_running);
78 return _ready_task.empty() && _runing_states.empty() && _timer->empty();
89 #ifndef DOXYGEN_SKIP_PROPERTY
92 std::unique_ptr<task_base_t> del_switch(
state_base_t* sptr);
93 void add_switch(std::unique_ptr<task_base_t> task);
107 #endif //DOXYGEN_SKIP_PROPERTY