39typedef struct ComplexTask_WeakRef ComplexTask_WeakRef;
40typedef struct TaskQueue TaskQueue;
41typedef struct TaskQueue_WeakRef TaskQueue_WeakRef;
42typedef struct TQWorker TQWorker;
43typedef struct TQWorker_WeakRef TQWorker_WeakRef;
45typedef struct ComplexTask_WeakRef ComplexTask_WeakRef;
47typedef struct TRGate_WeakRef TRGate_WeakRef;
48typedef struct ComplexTaskQueue ComplexTaskQueue;
49typedef struct ComplexTaskQueue_WeakRef ComplexTaskQueue_WeakRef;
52typedef struct TRGate_WeakRef TRGate_WeakRef;
54typedef struct TaskRequiresGate_WeakRef TaskRequiresGate_WeakRef;
57#define _sti_TRGate _sti_object
58#define SType_TRGate TRGate*
59#define STStorageType_TRGate TRGate*
60#define STypeArg_TRGate(type, val) stgeneric(object, (ObjInst*)objInstCheckClass(TRGate, val))
61#define STypeArgPtr_TRGate(type, val) (stgeneric*)objInstCheckClassPtr(TRGate, val)
62#define STypeCheckedArg_TRGate(type, val) stType(type), stArg(type, val)
63#define STypeCheckedPtrArg_TRGate(type, val) stType(type), stArgPtr(type, val)
66#define _sti_TaskRequiresGate _sti_object
67#define SType_TaskRequiresGate TaskRequiresGate*
68#define STStorageType_TaskRequiresGate TaskRequiresGate*
69#define STypeArg_TaskRequiresGate(type, val) stgeneric(object, (ObjInst*)objInstCheckClass(TaskRequiresGate, val))
70#define STypeArgPtr_TaskRequiresGate(type, val) (stgeneric*)objInstCheckClassPtr(TaskRequiresGate, val)
71#define STypeCheckedArg_TaskRequiresGate(type, val) stType(type), stArg(type, val)
72#define STypeCheckedPtrArg_TaskRequiresGate(type, val) stType(type), stArgPtr(type, val)
74typedef struct TRGate_ClassIf {
79 bool (*open)(_In_
void* self);
80 bool (*seal)(_In_
void* self);
81 void (*progress)(_In_
void* self);
82 bool (*registerTask)(_In_
void* self,
ComplexTask* task);
84extern TRGate_ClassIf TRGate_ClassIf_tmpl;
86typedef struct TaskRequiresGate_ClassIf {
91 uint32 (*state)(_In_
void* self,
ComplexTask* task);
92 int64 (*progress)(_In_
void* self);
93 bool (*tryAcquire)(_In_
void* self,
ComplexTask* task);
94 bool (*release)(_In_
void* self,
ComplexTask* task);
95 void (*cancel)(_In_
void* self);
96 bool (*registerTask)(_In_
void* self, _In_
ComplexTask* task);
97} TaskRequiresGate_ClassIf;
98extern TaskRequiresGate_ClassIf TaskRequiresGate_ClassIf_tmpl;
108 atomic(uintptr) _ref;
109 atomic(ptr) _weakref;
114 sa_ComplexTask _waitlist;
118#define TRGate(inst) objInstCheckClass(TRGate, inst)
119#define TRGateNone ((TRGate*)NULL)
121typedef struct TRGate_WeakRef {
124 void* _is_TRGate_WeakRef;
125 void* _is_ObjInst_WeakRef;
127 atomic(uintptr) _ref;
130#define TRGate_WeakRef(inst) objWeakRefCheckClass(TRGate, inst)
138#define trgateCreate(name) TRGate_create(name)
145#define trgateOpen(self) (self)->_->open(TRGate(self))
151#define trgateSeal(self) (self)->_->seal(TRGate(self))
156#define trgateProgress(self) (self)->_->progress(TRGate(self))
162#define trgateRegisterTask(self, task) (self)->_->registerTask(TRGate(self), ComplexTask(task))
167 TaskRequiresGate_ClassIf* _;
168 void* _is_TaskRequiresGate;
169 void* _is_TaskRequires;
173 atomic(uintptr) _ref;
174 atomic(ptr) _weakref;
180#define TaskRequiresGate(inst) objInstCheckClass(TaskRequiresGate, inst)
181#define TaskRequiresGateNone ((TaskRequiresGate*)NULL)
183typedef struct TaskRequiresGate_WeakRef {
186 void* _is_TaskRequiresGate_WeakRef;
187 void* _is_TaskRequires_WeakRef;
188 void* _is_ObjInst_WeakRef;
190 atomic(uintptr) _ref;
192} TaskRequiresGate_WeakRef;
193#define TaskRequiresGate_WeakRef(inst) objWeakRefCheckClass(TaskRequiresGate, inst)
201#define taskrequiresgateCreate(gate) TaskRequiresGate_create(TRGate(gate))
204#define taskrequiresgateState(self, task) (self)->_->state(TaskRequiresGate(self), ComplexTask(task))
206#define taskrequiresgateProgress(self) (self)->_->progress(TaskRequiresGate(self))
208#define taskrequiresgateTryAcquire(self, task) (self)->_->tryAcquire(TaskRequiresGate(self), ComplexTask(task))
210#define taskrequiresgateRelease(self, task) (self)->_->release(TaskRequiresGate(self), ComplexTask(task))
212#define taskrequiresgateCancel(self) (self)->_->cancel(TaskRequiresGate(self))
214#define taskrequiresgateRegisterTask(self, task) (self)->_->registerTask(TaskRequiresGate(self), ComplexTask(task))
Complex task with dependencies, scheduling, and resource management.
#define saDeclarePtr(name)
#define _objfactory_guaranteed
CX Struct System - Introspectable, serializable POD structures in C.
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.