|
CX Framework
Cross-platform C utility framework
|
Modules | |
| Task Gates | |
| Resource Requirements | |
| Task Dependencies | |
Data Structures | |
| struct | TaskRequires |
| Abstract base class for task requirements (dependencies, resources, gates). More... | |
Macros | |
| #define | taskrequiresState(self, task) (self)->_->state(TaskRequires(self), ComplexTask(task)) |
| #define | taskrequiresProgress(self) (self)->_->progress(TaskRequires(self)) |
| #define | taskrequiresTryAcquire(self, task) (self)->_->tryAcquire(TaskRequires(self), ComplexTask(task)) |
| #define | taskrequiresRelease(self, task) (self)->_->release(TaskRequires(self), ComplexTask(task)) |
| #define | taskrequiresCancel(self) (self)->_->cancel(TaskRequires(self)) |
| #define | taskrequiresRegisterTask(self, task) (self)->_->registerTask(TaskRequires(self), ComplexTask(task)) |
Typedefs | |
| typedef struct TaskRequires | TaskRequires |
| Abstract base class for task requirements (dependencies, resources, gates). | |
Enumerations | |
| enum | TaskRequiresStateEnum { TASK_Requires_Wait = 0 , TASK_Requires_Ok , TASK_Requires_Ok_Permanent , TASK_Requires_Fail_Permanent , TASK_Requires_Acquire } |
| Possible states of a requirement. More... | |
TaskRequires is the abstract base for all types of requirements that a ComplexTask can depend on before execution. Requirements encompass:
Requirements can have timeouts (expires field). When a requirement times out, it transitions to TASK_Requires_Fail_Permanent unless the task has TASK_Soft_Requires flag set.
Concrete implementations:
| #define taskrequiresCancel | ( | self | ) | (self)->_->cancel(TaskRequires(self)) |
void taskrequiresCancel(TaskRequires* self);
Cascade cancellation to dependencies. Called when task is cancelled and has TASK_Cancel_Cascade flag.
Definition at line 123 of file taskrequires.h.
| #define taskrequiresProgress | ( | self | ) | (self)->_->progress(TaskRequires(self)) |
int64 taskrequiresProgress(TaskRequires* self);
Get progress timestamp if applicable.
Definition at line 103 of file taskrequires.h.
| #define taskrequiresRegisterTask | ( | self, | |
| task | |||
| ) | (self)->_->registerTask(TaskRequires(self), ComplexTask(task)) |
bool taskrequiresRegisterTask(TaskRequires* self, ComplexTask* task);
Register task for notification when requirement state changes. The requirement should advance the task out of defer queue when state changes. Also registers task with resources for one-shot acquisition.
| task | Task to notify |
Definition at line 131 of file taskrequires.h.
| #define taskrequiresRelease | ( | self, | |
| task | |||
| ) | (self)->_->release(TaskRequires(self), ComplexTask(task)) |
bool taskrequiresRelease(TaskRequires* self, ComplexTask* task);
Release previously acquired resource. Must be paired with tryAcquire() and use the same task.
| task | Task releasing the resource |
Definition at line 118 of file taskrequires.h.
| #define taskrequiresState | ( | self, | |
| task | |||
| ) | (self)->_->state(TaskRequires(self), ComplexTask(task)) |
uint32 taskrequiresState(TaskRequires* self, ComplexTask* task);
Calculate current state of the requirement.
| task | Task checking this requirement |
Definition at line 98 of file taskrequires.h.
| #define taskrequiresTryAcquire | ( | self, | |
| task | |||
| ) | (self)->_->tryAcquire(TaskRequires(self), ComplexTask(task)) |
bool taskrequiresTryAcquire(TaskRequires* self, ComplexTask* task);
Try to acquire resource for requirements that need acquisition. Only called if state() returns TASK_Requires_Acquire. MUST NOT block. If successful, release() must be called when task finishes.
| task | Task acquiring the resource |
Definition at line 111 of file taskrequires.h.
Possible states of a requirement.
Definition at line 43 of file taskrequires.h.