14 std::vector<ITask*> _dependents{};
15 int _dependencies{ 0 };
20template <
typename ResultType>
33 explicit Task(std::function<ResultType()> function);
54 std::function<ResultType()> _function;
55 std::promise<ResultType> _promise;
56 std::shared_future<ResultType> _future;
61template <
typename ResultType>
82 ResultType
get()
const;
92template <
typename ResultType>
94 if constexpr (std::is_void_v<ResultType>) {
96 return std::tuple<>{};
98 return std::tuple{ handle.
get() };
102template <
typename... ResultTypes>
107template <
typename ResultType>
108Task<ResultType>::Task(std::function<ResultType()> function) : _function(std::move(function)), _future(_promise.get_future().share()) {}
110template <
typename ResultType>
113 if constexpr (std::is_void_v<ResultType>) {
115 _promise.set_value();
117 ResultType result = _function();
118 _promise.set_value(result);
121 _promise.set_exception(std::current_exception());
125template <
typename ResultType>
127 if constexpr (std::is_void_v<ResultType>) {
130 return _future.get();
134template <
typename ResultType>
137template <
typename ResultType>
auto task(FunctionType &&function)
Creates a new task with the given function.
Definition: exkit.hpp:131
TaskHandle(Task< ResultType > *task)
Construct a new TaskHandle object.
Definition: task.hpp:135
ResultType get() const
Retrieves the result of the task referred to by this handle.
Definition: task.hpp:138
ResultType get()
Retrieves the result of the task.
Definition: task.hpp:126
Task(std::function< ResultType()> function)
Construct a new Task object.
Definition: task.hpp:108
void execute() override
Executes the task's function and sets the result in the promise.
Definition: task.hpp:111
auto dependency_value(TaskHandle< ResultType > const &handle)
Definition: task.hpp:93
auto dependency_values(TaskHandle< ResultTypes > const &... deps)
Definition: task.hpp:103