4 #ifndef __SIMPLE_THREADING_TASK__
5 #define __SIMPLE_THREADING_TASK__
10 #include "context.hpp"
18 context() : evaluate([&]() -> data& {
return m_result; }) { }
20 template <
typename Callable,
typename... As>
21 context(Callable&& cb, As&&... as) {
22 using isv =
typename std::is_void<detail::function_return_type<Callable,As...>>;
23 evaluate = create_function(
24 std::integral_constant<bool,isv::value>(),
25 std::forward<Callable>(cb),
26 std::forward<As>(as)...);
30 template <
typename Callable,
typename... As>
31 std::function<data&()>
32 create_function(std::true_type, Callable&& cb, As&&... as) {
33 return [=]()
mutable -> data& {
36 cb(std::forward<As>(as)...);
39 return this->m_result;
44 template <
typename Callable,
typename... As>
45 std::function<data&()>
46 create_function(std::false_type, Callable&& cb, As&&... as) {
47 return [=]()
mutable -> data& {
50 typedef detail::function_return_type<Callable,As...> R;
51 this->m_result = data::make<R>(cb(std::forward<As>(as)...));
54 return this->m_result;
61 std::function<data&()> evaluate;
89 inline virtual ~
task() { }
96 template <
typename... As>
99 t.ctx(std::make_shared<detail::task::context>(std::forward<As>(as)...));
103 inline data& operator()() {
105 ctx(std::make_shared<detail::task::context>());
108 return ctx()->evaluate();
type erased data container
Definition: data.hpp:24
CRTP-templated interface to provide shared context api.
Definition: context.hpp:43
std::shared_ptr< detail::task::context > & ctx() const
Definition: context.hpp:50
wrap any Callable and optional arguments into an executable task
Definition: task.hpp:88
static task make(As &&... as)
wrap an arbitrary Callable and optional arguments in a task
Definition: task.hpp:97