1#ifndef FENIX_TASKS_SUBTASK_HPP
2#define FENIX_TASKS_SUBTASK_HPP
8namespace fenix::tasks {
12 { t.done() } -> std::same_as<bool>;
22 virtual bool done()
const = 0;
23 virtual void resume()
const = 0;
24 virtual void wait()
const = 0;
28template <Subtaskable T>
30 using U = std::remove_reference_t<T>;
31 SubtaskHolder(T&& t) : task(std::make_shared<U>(std::move(t))) {}
32 U* operator->() {
return task.get(); }
33 std::shared_ptr<U> task;
35template <Subtaskable T>
38 T* operator->() {
return &task; }
43template <Subtaskable T>
48 Subtask(T&& t) : task(std::forward<T>(t)) {};
51 HolderT& operator->()
const {
return task; }
53 bool done()
const override {
return task->done(); }
54 void resume()
const override { task->resume(); }
55 void wait()
const override {
61 return task->result();
Definition subtask.hpp:18
Definition subtask.hpp:44
Definition subtask.hpp:11
Definition subtask.hpp:29