librf
current_scheduler.h
1 #pragma once
2 
3 namespace resumef
4 {
9  {
10  bool await_ready() const noexcept
11  {
12  return false;
13  }
14  template<class _PromiseT, typename = std::enable_if_t<traits::is_promise_v<_PromiseT>>>
15  bool await_suspend(coroutine_handle<_PromiseT> handler)
16  {
17  _PromiseT& promise = handler.promise();
18  auto* state = promise.get_state();
19  this->_scheduler = state->get_scheduler();
20 
21  return false;
22  }
23  scheduler_t* await_resume() const noexcept
24  {
25  return _scheduler;
26  }
27  private:
28  scheduler_t* _scheduler;
29 #ifdef DOXYGEN_SKIP_PROPERTY
30  public:
39 #endif //DOXYGEN_SKIP_PROPERTY
40  };
41 
48  inline get_current_scheduler_awaitor get_current_scheduler() noexcept
49  {
50  return {};
51  }
52 
53 
58  {
59  bool await_ready() const noexcept
60  {
61  return false;
62  }
63  template<class _PromiseT, typename = std::enable_if_t<traits::is_promise_v<_PromiseT>>>
64  bool await_suspend(coroutine_handle<_PromiseT> handler)
65  {
66  _PromiseT& promise = handler.promise();
67  auto* parent = promise.get_state();
68  this->_state = parent->get_root();
69 
70  return false;
71  }
72  state_base_t* await_resume() const noexcept
73  {
74  return _state;
75  }
76  private:
77  state_base_t* _state;
78 #ifdef DOXYGEN_SKIP_PROPERTY
79  public:
87  static get_root_state_awaitor get_root_state() noexcept;
88 #endif //DOXYGEN_SKIP_PROPERTY
89  };
90 
97  inline get_root_state_awaitor get_root_state() noexcept
98  {
99  return {};
100  }
101 
102 }
resumef::get_root_state_awaitor
获得本协程绑定的跟state指针的可等待对象。
Definition: current_scheduler.h:57
resumef::get_current_scheduler_awaitor
获得本协程绑定的调度器的可等待对象。
Definition: current_scheduler.h:8
resumef::scheduler_t
协程调度器。
Definition: scheduler.h:10
resumef::get_root_state_awaitor::get_root_state
static get_root_state_awaitor get_root_state() noexcept
获得当前协程的跟state指针。
resumef::state_base_t
state基类,state用于在协程的promise和future之间共享数据。
Definition: state.h:8
resumef::get_current_scheduler_awaitor::get_current_scheduler
static get_current_scheduler_awaitor get_current_scheduler() noexcept
获得当前协程绑定的调度器。