36typedef struct ComplexTask_WeakRef ComplexTask_WeakRef;
37typedef struct TaskQueue TaskQueue;
38typedef struct TaskQueue_WeakRef TaskQueue_WeakRef;
39typedef struct TQWorker TQWorker;
40typedef struct TQWorker_WeakRef TQWorker_WeakRef;
42typedef struct ComplexTask_WeakRef ComplexTask_WeakRef;
44typedef struct TRGate_WeakRef TRGate_WeakRef;
45typedef struct ComplexTaskQueue ComplexTaskQueue;
46typedef struct ComplexTaskQueue_WeakRef ComplexTaskQueue_WeakRef;
49typedef struct TRGate_WeakRef TRGate_WeakRef;
51typedef struct TaskRequiresGate_WeakRef TaskRequiresGate_WeakRef;
57typedef struct TRGate_ClassIf {
62 bool (*open)(_In_
void* self);
63 bool (*seal)(_In_
void* self);
64 void (*progress)(_In_
void* self);
65 bool (*registerTask)(_In_
void* self,
ComplexTask* task);
67extern TRGate_ClassIf TRGate_ClassIf_tmpl;
69typedef struct TaskRequiresGate_ClassIf {
74 uint32 (*state)(_In_
void* self,
ComplexTask* task);
75 int64 (*progress)(_In_
void* self);
76 bool (*tryAcquire)(_In_
void* self,
ComplexTask* task);
77 bool (*release)(_In_
void* self,
ComplexTask* task);
78 void (*cancel)(_In_
void* self);
79 bool (*registerTask)(_In_
void* self, _In_
ComplexTask* task);
80} TaskRequiresGate_ClassIf;
81extern TaskRequiresGate_ClassIf TaskRequiresGate_ClassIf_tmpl;
97 sa_ComplexTask _waitlist;
101#define TRGate(inst) ((TRGate*)(unused_noeval((inst) && &((inst)->_is_TRGate)), (inst)))
102#define TRGateNone ((TRGate*)NULL)
104typedef struct TRGate_WeakRef {
107 void* _is_TRGate_WeakRef;
108 void* _is_ObjInst_WeakRef;
110 atomic(uintptr) _ref;
113#define TRGate_WeakRef(inst) ((TRGate_WeakRef*)(unused_noeval((inst) && &((inst)->_is_TRGate_WeakRef)), (inst)))
121#define trgateCreate(name) TRGate_create(name)
128#define trgateOpen(self) (self)->_->open(TRGate(self))
134#define trgateSeal(self) (self)->_->seal(TRGate(self))
139#define trgateProgress(self) (self)->_->progress(TRGate(self))
145#define trgateRegisterTask(self, task) (self)->_->registerTask(TRGate(self), ComplexTask(task))
150 TaskRequiresGate_ClassIf* _;
151 void* _is_TaskRequiresGate;
152 void* _is_TaskRequires;
156 atomic(uintptr) _ref;
157 atomic(ptr) _weakref;
163#define TaskRequiresGate(inst) ((TaskRequiresGate*)(unused_noeval((inst) && &((inst)->_is_TaskRequiresGate)), (inst)))
164#define TaskRequiresGateNone ((TaskRequiresGate*)NULL)
166typedef struct TaskRequiresGate_WeakRef {
169 void* _is_TaskRequiresGate_WeakRef;
170 void* _is_TaskRequires_WeakRef;
171 void* _is_ObjInst_WeakRef;
173 atomic(uintptr) _ref;
175} TaskRequiresGate_WeakRef;
176#define TaskRequiresGate_WeakRef(inst) ((TaskRequiresGate_WeakRef*)(unused_noeval((inst) && &((inst)->_is_TaskRequiresGate_WeakRef)), (inst)))
184#define taskrequiresgateCreate(gate) TaskRequiresGate_create(TRGate(gate))
187#define taskrequiresgateState(self, task) (self)->_->state(TaskRequiresGate(self), ComplexTask(task))
189#define taskrequiresgateProgress(self) (self)->_->progress(TaskRequiresGate(self))
191#define taskrequiresgateTryAcquire(self, task) (self)->_->tryAcquire(TaskRequiresGate(self), ComplexTask(task))
193#define taskrequiresgateRelease(self, task) (self)->_->release(TaskRequiresGate(self), ComplexTask(task))
195#define taskrequiresgateCancel(self) (self)->_->cancel(TaskRequiresGate(self))
197#define taskrequiresgateRegisterTask(self, task) (self)->_->registerTask(TaskRequiresGate(self), ComplexTask(task))
Complex task with dependencies, scheduling, and resource management.
#define saDeclarePtr(name)
#define _objfactory_guaranteed
Mutex synchronization primitive.
CX Object System - Object-oriented programming in C.
Complex task with dependencies, scheduling, and resource management.
One-time event gate for task synchronization.
string name
Gate name for logging and debugging.
int64 lastprogress
Last time progress() was called.
atomic(uint32) state
Current gate state (closed/open/sealed)
Requirement that waits for a gate to open.
TRGate * gate
Gate to wait for.
int64 expires
Time after which requirement times out and fails (0 = no timeout)
Abstract base class for task requirements.