21 #include <quantum/quantum_allocator.h> 22 #include <quantum/quantum_traits.h> 27 #ifndef __QUANTUM_TASK_ALLOC_SIZE 28 #define __QUANTUM_TASK_ALLOC_SIZE __QUANTUM_DEFAULT_POOL_ALLOC_SIZE 30 #ifndef __QUANTUM_USE_DEFAULT_ALLOCATOR 31 #ifdef __QUANTUM_ALLOCATE_POOL_FROM_HEAP 40 template <
class RET,
class FUNC,
class ... ARGS>
47 Util::bindCaller(ctx,
std::forward<FUNC>(func),
std::forward<ARGS>(args)...)),
48 _queueId((int)
IQueue::QueueId::Any),
49 _isHighPriority(false),
52 _terminated ATOMIC_FLAG_INIT
55 template <
class RET,
class FUNC,
class ... ARGS>
64 Util::bindCaller(ctx,
std::forward<FUNC>(func),
std::forward<ARGS>(args)...)),
66 _isHighPriority(isHighPriority),
67 _rc((int)
ITask::RetCode::Running),
69 _terminated ATOMIC_FLAG_INIT
81 if (!_terminated.test_and_set())
83 if (_ctx) _ctx->terminate();
136 return shared_from_this();
154 return _ctx ? _ctx->isBlocked() :
false;
160 return _ctx ? _ctx->isSleeping(updateTimer) :
false;
166 return _isHighPriority;
170 void* Task::operator
new(size_t)
176 void Task::operator
delete(
void* p)
184 #ifndef __QUANTUM_USE_DEFAULT_ALLOCATOR static AllocType & instance(std::enable_if_t<!A::default_constructor::value, uint16_t > size)
Definition: quantum_allocator.h:56
Definition: quantum_coroutine_pool_allocator.h:84
ITaskContinuation::Ptr getNextTask() final
Definition: quantum_task_impl.h:114
Definition: quantum_buffer_impl.h:22
Definition: quantum_allocator.h:36
int getQueueId() final
Definition: quantum_task_impl.h:105
void setNextTask(ITaskContinuation::Ptr nextTask) final
Definition: quantum_task_impl.h:117
void terminate() final
Terminates the object.
Definition: quantum_task_impl.h:79
ITaskContinuation::Ptr getFirstTask() final
Definition: quantum_task_impl.h:126
static size_type & taskAllocSize()
Get/set if the default size for task object pools.
Definition: quantum_allocator_traits.h:144
Utility to bind a user callable function unto a coroutine or an IO task.
Definition: quantum_util.h:45
void setQueueId(int queueId) final
Definition: quantum_task_impl.h:99
Definition: quantum_stl_impl.h:23
Definition: quantum_allocator.h:54
Type
Definition: quantum_itask.h:37
std::shared_ptr< ITaskContinuation > Ptr
Definition: quantum_itask_continuation.h:32
Runnable object representing a coroutine.
Definition: quantum_task.h:40
int run() final
Definition: quantum_task_impl.h:88
ITaskContinuation::Ptr getErrorHandlerOrFinalTask() final
Definition: quantum_task_impl.h:132
Provides a stack-based object pool to the underlying ContiguousPoolManager. The default buffer size i...
Definition: quantum_stack_allocator.h:34
Concrete class representing a coroutine or a thread context.
Definition: quantum_icoro_context.h:29
Interface to a task queue. For internal use only.
Definition: quantum_iqueue.h:33
bool isSleeping(bool updateTimer=false) final
Definition: quantum_task_impl.h:158
RetCode
Definition: quantum_itask.h:42
bool isHighPriority() const final
Definition: quantum_task_impl.h:164
StackAllocator< Task, __QUANTUM_TASK_ALLOC_SIZE > TaskAllocator
Definition: quantum_task_impl.h:34
Allows application-wide settings for the various allocators used by Quantum.
Definition: quantum_allocator_traits.h:46
Task(std::shared_ptr< Context< RET >> ctx, ITask::Type type, FUNC &&func, ARGS &&... args)
Definition: quantum_task_impl.h:41
Type getType() const final
Definition: quantum_task_impl.h:111
static void deleter(Task *p)
Definition: quantum_task_impl.h:182
Interface to a task. For internal use only.
Definition: quantum_itask.h:32
bool isBlocked() const final
Definition: quantum_task_impl.h:152
ITaskContinuation::Ptr getPrevTask() final
Definition: quantum_task_impl.h:120
void setPrevTask(ITaskContinuation::Ptr prevTask) final
Definition: quantum_task_impl.h:123