CX Framework
Cross-platform C utility framework
Loading...
Searching...
No Matches
taskrequiresgate.h
Go to the documentation of this file.
1
25
26#pragma once
27// This header file is auto-generated!
28// Do not make changes to this file or they will be overwritten.
29// clang-format off
30#include <cx/obj.h>
31#include <cx/struct.h>
32#include "taskrequires.h"
33#include <cx/thread/mutex.h>
35
36CX_C_BEGIN
37
38typedef struct ComplexTask ComplexTask;
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;
44typedef struct ComplexTask ComplexTask;
45typedef struct ComplexTask_WeakRef ComplexTask_WeakRef;
46typedef struct TRGate TRGate;
47typedef struct TRGate_WeakRef TRGate_WeakRef;
48typedef struct ComplexTaskQueue ComplexTaskQueue;
49typedef struct ComplexTaskQueue_WeakRef ComplexTaskQueue_WeakRef;
50typedef struct TaskControl TaskControl;
51typedef struct TRGate TRGate;
52typedef struct TRGate_WeakRef TRGate_WeakRef;
54typedef struct TaskRequiresGate_WeakRef TaskRequiresGate_WeakRef;
56saDeclarePtr(TRGate_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)
65saDeclarePtr(TaskRequiresGate_WeakRef);
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)
73
74typedef struct TRGate_ClassIf {
75 ObjIface* _implements;
76 ObjIface* _parent;
77 size_t _size;
78
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);
83} TRGate_ClassIf;
84extern TRGate_ClassIf TRGate_ClassIf_tmpl;
85
86typedef struct TaskRequiresGate_ClassIf {
87 ObjIface* _implements;
88 ObjIface* _parent;
89 size_t _size;
90
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;
99
101typedef struct TRGate {
102 union {
103 TRGate_ClassIf* _;
104 void* _is_TRGate;
105 void* _is_ObjInst;
106 };
107 ObjClassInfo* _clsinfo;
108 atomic(uintptr) _ref;
109 atomic(ptr) _weakref;
110
111 string name;
112 atomic(uint32) state;
113 Mutex _wlmtx;
114 sa_ComplexTask _waitlist;
116} TRGate;
117extern ObjClassInfo TRGate_clsinfo;
118#define TRGate(inst) objInstCheckClass(TRGate, inst)
119#define TRGateNone ((TRGate*)NULL)
120
121typedef struct TRGate_WeakRef {
122 union {
123 ObjInst* _inst;
124 void* _is_TRGate_WeakRef;
125 void* _is_ObjInst_WeakRef;
126 };
127 atomic(uintptr) _ref;
128 RWLock _lock;
129} TRGate_WeakRef;
130#define TRGate_WeakRef(inst) objWeakRefCheckClass(TRGate, inst)
131
132_objfactory_guaranteed TRGate* TRGate_create(_In_opt_ strref name);
138#define trgateCreate(name) TRGate_create(name)
139
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))
163
165typedef struct TaskRequiresGate {
166 union {
167 TaskRequiresGate_ClassIf* _;
168 void* _is_TaskRequiresGate;
169 void* _is_TaskRequires;
170 void* _is_ObjInst;
171 };
172 ObjClassInfo* _clsinfo;
173 atomic(uintptr) _ref;
174 atomic(ptr) _weakref;
175
176 int64 expires;
179extern ObjClassInfo TaskRequiresGate_clsinfo;
180#define TaskRequiresGate(inst) objInstCheckClass(TaskRequiresGate, inst)
181#define TaskRequiresGateNone ((TaskRequiresGate*)NULL)
182
183typedef struct TaskRequiresGate_WeakRef {
184 union {
185 ObjInst* _inst;
186 void* _is_TaskRequiresGate_WeakRef;
187 void* _is_TaskRequires_WeakRef;
188 void* _is_ObjInst_WeakRef;
189 };
190 atomic(uintptr) _ref;
191 RWLock _lock;
192} TaskRequiresGate_WeakRef;
193#define TaskRequiresGate_WeakRef(inst) objWeakRefCheckClass(TaskRequiresGate, inst)
194
195_objfactory_guaranteed TaskRequiresGate* TaskRequiresGate_create(_In_ TRGate* gate);
201#define taskrequiresgateCreate(gate) TaskRequiresGate_create(TRGate(gate))
202
203// uint32 taskrequiresgateState(TaskRequiresGate* self, ComplexTask* task);
204#define taskrequiresgateState(self, task) (self)->_->state(TaskRequiresGate(self), ComplexTask(task))
205// int64 taskrequiresgateProgress(TaskRequiresGate* self);
206#define taskrequiresgateProgress(self) (self)->_->progress(TaskRequiresGate(self))
207// bool taskrequiresgateTryAcquire(TaskRequiresGate* self, ComplexTask* task);
208#define taskrequiresgateTryAcquire(self, task) (self)->_->tryAcquire(TaskRequiresGate(self), ComplexTask(task))
209// bool taskrequiresgateRelease(TaskRequiresGate* self, ComplexTask* task);
210#define taskrequiresgateRelease(self, task) (self)->_->release(TaskRequiresGate(self), ComplexTask(task))
211// void taskrequiresgateCancel(TaskRequiresGate* self);
212#define taskrequiresgateCancel(self) (self)->_->cancel(TaskRequiresGate(self))
213// bool taskrequiresgateRegisterTask(TaskRequiresGate* self, ComplexTask* task);
214#define taskrequiresgateRegisterTask(self, task) (self)->_->registerTask(TaskRequiresGate(self), ComplexTask(task))
215
216CX_C_END
Complex task with dependencies, scheduling, and resource management.
#define saDeclarePtr(name)
Definition sarray.h:100
#define _objfactory_guaranteed
Definition objimpl.h:106
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.
Definition mutex.h:60
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.