CX Framework
Cross-platform C utility framework
Loading...
Searching...
No Matches
mptask.h
Go to the documentation of this file.
1
41
42#pragma once
43// This header file is auto-generated!
44// Do not make changes to this file or they will be overwritten.
45// clang-format off
46#include <cx/obj.h>
47#include "complextask.h"
48
49typedef struct TaskQueue TaskQueue;
50typedef struct TaskQueue_WeakRef TaskQueue_WeakRef;
51typedef struct TQWorker TQWorker;
52typedef struct TQWorker_WeakRef TQWorker_WeakRef;
53typedef struct ComplexTask ComplexTask;
54typedef struct ComplexTask_WeakRef ComplexTask_WeakRef;
55typedef struct ComplexTask ComplexTask;
56typedef struct ComplexTask_WeakRef ComplexTask_WeakRef;
57typedef struct TRGate TRGate;
58typedef struct TRGate_WeakRef TRGate_WeakRef;
59typedef struct ComplexTaskQueue ComplexTaskQueue;
60typedef struct ComplexTaskQueue_WeakRef ComplexTaskQueue_WeakRef;
61typedef struct TaskControl TaskControl;
63typedef struct MultiphaseTask_WeakRef MultiphaseTask_WeakRef;
65saDeclarePtr(MultiphaseTask_WeakRef);
66
77typedef uint32 (*MPTPhaseFunc)(void *self, TaskQueue* tq, TQWorker* worker, TaskControl *tcon);
83#define mptaskAddPhases(self, parr) mptask_addPhases(self, sizeof(parr) / sizeof((parr)[0]), (parr), false)
88#define mptaskAddFailPhases(self, parr) mptask_addPhases(self, sizeof(parr) / sizeof((parr)[0]), (parr), true)
89
90typedef struct MultiphaseTask_ClassIf {
91 ObjIface* _implements;
92 ObjIface* _parent;
93 size_t _size;
94
95 uint32 (*run)(_In_ void* self, _In_ TaskQueue* tq, _In_ TQWorker* worker, _Inout_ TaskControl* tcon);
96 void (*runCancelled)(_In_ void* self, _In_ TaskQueue* tq, _In_ TQWorker* worker);
97 bool (*cancel)(_In_ void* self);
98 bool (*reset)(_In_ void* self);
99 bool (*wait)(_In_ void* self, int64 timeout);
100 intptr (*cmp)(_In_ void* self, void* other, uint32 flags);
101 uint32 (*hash)(_In_ void* self, uint32 flags);
102 uint32 (*finish)(_In_ void* self, uint32 result, TaskControl* tcon);
103} MultiphaseTask_ClassIf;
104extern MultiphaseTask_ClassIf MultiphaseTask_ClassIf_tmpl;
105
107typedef struct MultiphaseTask {
108 union {
109 MultiphaseTask_ClassIf* _;
110 void* _is_MultiphaseTask;
111 void* _is_ComplexTask;
112 void* _is_Task;
113 void* _is_BasicTask;
114 void* _is_ObjInst;
115 };
116 ObjClassInfo* _clsinfo;
117 atomic(uintptr) _ref;
118 atomic(ptr) _weakref;
119
120 atomic(uint32) state;
121 string name;
122 int64 last;
123 cchain oncomplete;
124 int64 nextrun;
126 Weak(ComplexTaskQueue)* lastq;
127 sa_TaskRequires _requires;
128 uint16 flags;
129 uint16 _intflags;
130 atomic(uint32) _advcount;
131 sa_MPTPhaseFunc phases;
132 sa_MPTPhaseFunc failphases;
133 uint32 _phase;
134 bool _fail;
136extern ObjClassInfo MultiphaseTask_clsinfo;
137#define MultiphaseTask(inst) ((MultiphaseTask*)(unused_noeval((inst) && &((inst)->_is_MultiphaseTask)), (inst)))
138#define MultiphaseTaskNone ((MultiphaseTask*)NULL)
139
140typedef struct MultiphaseTask_WeakRef {
141 union {
142 ObjInst* _inst;
143 void* _is_MultiphaseTask_WeakRef;
144 void* _is_ComplexTask_WeakRef;
145 void* _is_Task_WeakRef;
146 void* _is_BasicTask_WeakRef;
147 void* _is_ObjInst_WeakRef;
148 };
149 atomic(uintptr) _ref;
150 RWLock _lock;
151} MultiphaseTask_WeakRef;
152#define MultiphaseTask_WeakRef(inst) ((MultiphaseTask_WeakRef*)(unused_noeval((inst) && &((inst)->_is_MultiphaseTask_WeakRef)), (inst)))
153
154void MultiphaseTask__addPhases(_In_ MultiphaseTask* self, int32 num, MPTPhaseFunc parr[], bool fail);
162#define mptask_addPhases(self, num, parr, fail) MultiphaseTask__addPhases(MultiphaseTask(self), num, parr, fail)
163
169#define mptaskRequireTask(self, dep, failok) ComplexTask_requireTask(ComplexTask(self), Task(dep), failok)
170
177#define mptaskRequireTaskTimeout(self, dep, failok, timeout) ComplexTask_requireTaskTimeout(ComplexTask(self), Task(dep), failok, timeout)
178
183#define mptaskRequireResource(self, res) ComplexTask_requireResource(ComplexTask(self), TaskResource(res))
184
190#define mptaskRequireResourceTimeout(self, res, timeout) ComplexTask_requireResourceTimeout(ComplexTask(self), TaskResource(res), timeout)
191
196#define mptaskRequireGate(self, gate) ComplexTask_requireGate(ComplexTask(self), TRGate(gate))
197
203#define mptaskRequireGateTimeout(self, gate, timeout) ComplexTask_requireGateTimeout(ComplexTask(self), TRGate(gate), timeout)
204
209#define mptaskRequire(self, req) ComplexTask_require(ComplexTask(self), TaskRequires(req))
210
215#define mptaskAdvance(self) ComplexTask_advance(ComplexTask(self))
216
223#define mptaskCheckRequires(self, updateProgress, expires) ComplexTask_checkRequires(ComplexTask(self), updateProgress, expires)
224
228#define mptaskCancelRequires(self) ComplexTask_cancelRequires(ComplexTask(self))
229
235#define mptaskAcquireRequires(self, acquired) ComplexTask_acquireRequires(ComplexTask(self), acquired)
236
242#define mptaskReleaseRequires(self, resources) ComplexTask_releaseRequires(ComplexTask(self), resources)
243
244// bool mptask_setState(MultiphaseTask* self, uint32 newstate);
245#define mptask_setState(self, newstate) BasicTask__setState(BasicTask(self), newstate)
246
247// uint32 mptaskRun(MultiphaseTask* self, TaskQueue* tq, TQWorker* worker, TaskControl* tcon);
248#define mptaskRun(self, tq, worker, tcon) (self)->_->run(MultiphaseTask(self), TaskQueue(tq), TQWorker(worker), tcon)
254#define mptaskRunCancelled(self, tq, worker) (self)->_->runCancelled(MultiphaseTask(self), TaskQueue(tq), TQWorker(worker))
255// bool mptaskCancel(MultiphaseTask* self);
256#define mptaskCancel(self) (self)->_->cancel(MultiphaseTask(self))
257// bool mptaskReset(MultiphaseTask* self);
258#define mptaskReset(self) (self)->_->reset(MultiphaseTask(self))
264#define mptaskWait(self, timeout) (self)->_->wait(MultiphaseTask(self), timeout)
265// intptr mptaskCmp(MultiphaseTask* self, MultiphaseTask* other, uint32 flags);
266#define mptaskCmp(self, other, flags) (self)->_->cmp(MultiphaseTask(self), other, flags)
267// uint32 mptaskHash(MultiphaseTask* self, uint32 flags);
268#define mptaskHash(self, flags) (self)->_->hash(MultiphaseTask(self), flags)
276#define mptaskFinish(self, result, tcon) (self)->_->finish(MultiphaseTask(self), result, tcon)
277
Complex task with dependencies, scheduling, and resource management.
#define saDeclare(name)
Definition sarray.h:91
#define saDeclarePtr(name)
Definition sarray.h:98
MultiphaseTaskFlagsEnum
Flags controlling MultiphaseTask behavior.
Definition mptask.h:68
uint32(* MPTPhaseFunc)(void *self, TaskQueue *tq, TQWorker *worker, TaskControl *tcon)
Definition mptask.h:77
@ MPTASK_Greedy
Execute all phases immediately without yielding to other tasks.
Definition mptask.h:69
CX Object System - Object-oriented programming in C.
Complex task with dependencies, scheduling, and resource management.
Multiphase task with internal state machine for sequential execution phases.
Definition mptask.h:107
cchain oncomplete
Functions called when task completes (success or failure)
Definition mptask.h:123
sa_TaskRequires _requires
List of requirements (dependencies, resources, gates)
Definition mptask.h:127
bool _fail
True if currently executing fail phases.
Definition mptask.h:134
string name
Task name shown in monitor output.
Definition mptask.h:121
int64 lastprogress
Timestamp of last progress change.
Definition mptask.h:125
atomic(uint32) state
Current task state and flags.
uint16 _intflags
Internal flags reserved for scheduler use.
Definition mptask.h:129
sa_MPTPhaseFunc phases
Normal execution phases.
Definition mptask.h:131
atomic(uint32) _advcount
Number of times task has been advanced.
int64 last
Last time this task was moved between queues and/or run.
Definition mptask.h:122
uint32 _phase
Current phase index.
Definition mptask.h:133
uint16 flags
Task behavior flags (ComplexTaskFlagsEnum)
Definition mptask.h:128
int64 nextrun
Next scheduled run time.
Definition mptask.h:124
Weak(ComplexTaskQueue) *lastq
Last queue this task ran on before being deferred.
sa_MPTPhaseFunc failphases
Failure handling phases.
Definition mptask.h:132
One-time event gate for task synchronization.