CX Framework
Cross-platform C utility framework
Loading...
Searching...
No Matches
Task Requirements

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...
 

Detailed Description

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:

Macro Definition Documentation

◆ taskrequiresCancel

#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.

◆ taskrequiresProgress

#define taskrequiresProgress (   self)    (self)->_->progress(TaskRequires(self))

int64 taskrequiresProgress(TaskRequires* self);

Get progress timestamp if applicable.

Returns
Last progress timestamp, or -1 if not applicable

Definition at line 103 of file taskrequires.h.

◆ taskrequiresRegisterTask

#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.

Parameters
taskTask to notify
Returns
true if registration was successful

Definition at line 131 of file taskrequires.h.

◆ taskrequiresRelease

#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.

Parameters
taskTask releasing the resource
Returns
true if resource was released

Definition at line 118 of file taskrequires.h.

◆ taskrequiresState

#define taskrequiresState (   self,
  task 
)    (self)->_->state(TaskRequires(self), ComplexTask(task))

uint32 taskrequiresState(TaskRequires* self, ComplexTask* task);

Calculate current state of the requirement.

Parameters
taskTask checking this requirement
Returns
State code (TASK_Requires_Wait, TASK_Requires_Ok, etc.)

Definition at line 98 of file taskrequires.h.

◆ taskrequiresTryAcquire

#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.

Parameters
taskTask acquiring the resource
Returns
true if resource was acquired

Definition at line 111 of file taskrequires.h.

Enumeration Type Documentation

◆ TaskRequiresStateEnum

Possible states of a requirement.

Enumerator
TASK_Requires_Wait 

Not satisfied yet, but may be in the future (task should wait)

TASK_Requires_Ok 

Currently satisfied, but may change (check again later)

TASK_Requires_Ok_Permanent 

Permanently satisfied, can be removed from checks.

TASK_Requires_Fail_Permanent 

Cannot be satisfied, task should fail.

TASK_Requires_Acquire 

Will be satisfied only if tryAcquire() succeeds.

Definition at line 43 of file taskrequires.h.