7 #include <boost/atomic.hpp> 63 void _set_active_context(
context*);
84 void (*_destroy_functor)(
void*);
85 void (*_run_functor)(
void*,
void* );
89 void cleanup_task_specific_data();
91 std::shared_ptr<promise_base> _self;
92 boost::atomic<int32_t> _retain_count;
98 static void destroy(
void* v ) { ((T*)v)->~T(); }
102 static void run(
void* functor,
void* prom ) {
108 static void run(
void* functor,
void* prom ) {
115 template<
typename R,u
int64_t FunctorSize=64>
118 typedef std::shared_ptr<task<R,FunctorSize>>
ptr;
122 template<
typename Functor>
123 static ptr
create( Functor&& f,
const char* desc )
129 template<
typename Functor>
131 typedef typename std::remove_const_t< std::remove_reference_t<Functor> > FunctorType;
132 static_assert(
sizeof(f) <=
sizeof(_functor),
"sizeof(Functor) is larger than FunctorSize" );
133 new ((
char*)&_functor) FunctorType( std::forward<Functor>(f) );
136 _promise_impl =
static_cast<promise<R>*
>(
this);
140 alignas(double)
char _functor[FunctorSize];
143 template<u
int64_t FunctorSize>
146 typedef std::shared_ptr<task<void,FunctorSize>>
ptr;
150 template<
typename Functor>
151 static ptr
create( Functor&& f,
const char* desc )
157 template<
typename Functor>
159 typedef typename std::remove_const_t< std::remove_reference_t<Functor> > FunctorType;
160 static_assert(
sizeof(f) <=
sizeof(_functor),
"sizeof(Functor) is larger than FunctorSize" );
161 new ((
char*)&_functor) FunctorType( std::forward<Functor>(f) );
168 alignas(double)
char _functor[FunctorSize];
Used to forward declare value types.
void set_task_specific_data(unsigned slot, void *new_value, void(*cleanup)(void *))
static void destroy(void *v)
static ptr create(Functor &&f, const char *desc)
virtual void cancel(const char *reason FC_CANCELATION_REASON_DEFAULT_ARG) override
void * get_task_specific_data(unsigned slot)
#define FC_CANCELATION_REASON_DEFAULT_ARG
specific_data_info(void *value, void(*cleanup)(void *))
uint64_t _posted_num
Task priority looks like unsupported feature.
static void run(void *functor, void *prom)
fwd< spin_lock, 8 > _spinlock
std::shared_ptr< task< R, FunctorSize > > ptr
static void run(void *functor, void *prom)
virtual void cancel(const char *reason FC_CANCELATION_REASON_DEFAULT_ARG) override
std::shared_ptr< task< void, FunctorSize > > ptr
std::vector< detail::specific_data_info > * _task_specific_data
static ptr create(Functor &&f, const char *desc)
virtual void cancel(const char *reason FC_CANCELATION_REASON_DEFAULT_ARG) override
context * _active_context