19#include "pw_async2/task.h"
20#include "pw_function/function.h"
37template <typename Func = Function<Poll<>(Context&)>>
42 explicit constexpr FuncTask(F&& func) : func_(std::forward<F>(func)) {}
58template <
typename Func>
59FuncTask(Func&&) -> FuncTask<std::decay_t<Func>>;
79template <typename Func = Function<Poll<>()>,
81 ? ReturnValuePolicy::kDiscard
82 : ReturnValuePolicy::kKeep>
87 std::conditional_t<std::is_void_v<std::invoke_result_t<Func>>,
89 std::invoke_result_t<Func>>;
93 : func_(std::forward<Func>(func)) {}
105 bool has_value()
const {
return return_value_.has_value(); }
118 return *return_value_;
123 if constexpr (std::is_void_v<std::invoke_result_t<Func>>) {
125 return_value_.emplace();
127 return_value_ = func_();
133 std::optional<value_type> return_value_;
141template <
typename Func>
145 : func_(std::forward<Func>(func)) {}
164template <
typename Func>
165RunOnceTask(Func&&) -> RunOnceTask<Func>;
Definition: func_task.h:38
Poll DoPend(Context &cx) override
Definition: func_task.h:53
constexpr FuncTask(F &&func)
Creates a new Task that delegates Pend to func.
Definition: func_task.h:42
Poll DoPend(Context &) override
Definition: func_task.h:156
Definition: func_task.h:83
constexpr RunOnceTask(Func &&func)
Creates a new Task that runs the provided function once.
Definition: func_task.h:92
Poll DoPend(Context &) override
Definition: func_task.h:122
std::conditional_t< std::is_void_v< std::invoke_result_t< Func > >, ReadyType, std::invoke_result_t< Func > > value_type
The return value of the function.
Definition: func_task.h:89
value_type & value()
Definition: func_task.h:110
const value_type & value() const
Definition: func_task.h:113
bool has_value() const
Definition: func_task.h:105
value_type & Wait()
Blocks until the task completes and returns a reference its return value.
Definition: func_task.h:116
constexpr Poll Ready()
Returns a value indicating completion.
Definition: poll.h:337
ReturnValuePolicy
Whether to store or discard the function's return value in RunOnceTask.
Definition: func_task.h:62