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 "taskrequires.h"
32#include <cx/thread/mutex.h>
34
35typedef struct ComplexTask ComplexTask;
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;
41typedef struct ComplexTask ComplexTask;
42typedef struct ComplexTask_WeakRef ComplexTask_WeakRef;
43typedef struct TRGate TRGate;
44typedef struct TRGate_WeakRef TRGate_WeakRef;
45typedef struct ComplexTaskQueue ComplexTaskQueue;
46typedef struct ComplexTaskQueue_WeakRef ComplexTaskQueue_WeakRef;
47typedef struct TaskControl TaskControl;
48typedef struct TRGate TRGate;
49typedef struct TRGate_WeakRef TRGate_WeakRef;
51typedef struct TaskRequiresGate_WeakRef TaskRequiresGate_WeakRef;
53saDeclarePtr(TRGate_WeakRef);
55saDeclarePtr(TaskRequiresGate_WeakRef);
56
57typedef struct TRGate_ClassIf {
58 ObjIface* _implements;
59 ObjIface* _parent;
60 size_t _size;
61
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);
66} TRGate_ClassIf;
67extern TRGate_ClassIf TRGate_ClassIf_tmpl;
68
69typedef struct TaskRequiresGate_ClassIf {
70 ObjIface* _implements;
71 ObjIface* _parent;
72 size_t _size;
73
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;
82
84typedef struct TRGate {
85 union {
86 TRGate_ClassIf* _;
87 void* _is_TRGate;
88 void* _is_ObjInst;
89 };
90 ObjClassInfo* _clsinfo;
91 atomic(uintptr) _ref;
92 atomic(ptr) _weakref;
93
94 string name;
95 atomic(uint32) state;
96 Mutex _wlmtx;
97 sa_ComplexTask _waitlist;
99} TRGate;
100extern ObjClassInfo TRGate_clsinfo;
101#define TRGate(inst) ((TRGate*)(unused_noeval((inst) && &((inst)->_is_TRGate)), (inst)))
102#define TRGateNone ((TRGate*)NULL)
103
104typedef struct TRGate_WeakRef {
105 union {
106 ObjInst* _inst;
107 void* _is_TRGate_WeakRef;
108 void* _is_ObjInst_WeakRef;
109 };
110 atomic(uintptr) _ref;
111 RWLock _lock;
112} TRGate_WeakRef;
113#define TRGate_WeakRef(inst) ((TRGate_WeakRef*)(unused_noeval((inst) && &((inst)->_is_TRGate_WeakRef)), (inst)))
114
115_objfactory_guaranteed TRGate* TRGate_create(_In_opt_ strref name);
121#define trgateCreate(name) TRGate_create(name)
122
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))
146
148typedef struct TaskRequiresGate {
149 union {
150 TaskRequiresGate_ClassIf* _;
151 void* _is_TaskRequiresGate;
152 void* _is_TaskRequires;
153 void* _is_ObjInst;
154 };
155 ObjClassInfo* _clsinfo;
156 atomic(uintptr) _ref;
157 atomic(ptr) _weakref;
158
159 int64 expires;
162extern ObjClassInfo TaskRequiresGate_clsinfo;
163#define TaskRequiresGate(inst) ((TaskRequiresGate*)(unused_noeval((inst) && &((inst)->_is_TaskRequiresGate)), (inst)))
164#define TaskRequiresGateNone ((TaskRequiresGate*)NULL)
165
166typedef struct TaskRequiresGate_WeakRef {
167 union {
168 ObjInst* _inst;
169 void* _is_TaskRequiresGate_WeakRef;
170 void* _is_TaskRequires_WeakRef;
171 void* _is_ObjInst_WeakRef;
172 };
173 atomic(uintptr) _ref;
174 RWLock _lock;
175} TaskRequiresGate_WeakRef;
176#define TaskRequiresGate_WeakRef(inst) ((TaskRequiresGate_WeakRef*)(unused_noeval((inst) && &((inst)->_is_TaskRequiresGate_WeakRef)), (inst)))
177
178_objfactory_guaranteed TaskRequiresGate* TaskRequiresGate_create(_In_ TRGate* gate);
184#define taskrequiresgateCreate(gate) TaskRequiresGate_create(TRGate(gate))
185
186// uint32 taskrequiresgateState(TaskRequiresGate* self, ComplexTask* task);
187#define taskrequiresgateState(self, task) (self)->_->state(TaskRequiresGate(self), ComplexTask(task))
188// int64 taskrequiresgateProgress(TaskRequiresGate* self);
189#define taskrequiresgateProgress(self) (self)->_->progress(TaskRequiresGate(self))
190// bool taskrequiresgateTryAcquire(TaskRequiresGate* self, ComplexTask* task);
191#define taskrequiresgateTryAcquire(self, task) (self)->_->tryAcquire(TaskRequiresGate(self), ComplexTask(task))
192// bool taskrequiresgateRelease(TaskRequiresGate* self, ComplexTask* task);
193#define taskrequiresgateRelease(self, task) (self)->_->release(TaskRequiresGate(self), ComplexTask(task))
194// void taskrequiresgateCancel(TaskRequiresGate* self);
195#define taskrequiresgateCancel(self) (self)->_->cancel(TaskRequiresGate(self))
196// bool taskrequiresgateRegisterTask(TaskRequiresGate* self, ComplexTask* task);
197#define taskrequiresgateRegisterTask(self, task) (self)->_->registerTask(TaskRequiresGate(self), ComplexTask(task))
198
Complex task with dependencies, scheduling, and resource management.
#define saDeclarePtr(name)
Definition sarray.h:98
#define _objfactory_guaranteed
Definition objimpl.h:104
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.