CX Framework
Cross-platform C utility framework
Loading...
Searching...
No Matches
tqworker.h
1#pragma once
2// This header file is auto-generated!
3// Do not make changes to this file or they will be overwritten.
4// clang-format off
5#include <cx/obj.h>
6#include <cx/struct.h>
8
9CX_C_BEGIN
10
11typedef struct TaskQueue TaskQueue;
12typedef struct TaskQueue_WeakRef TaskQueue_WeakRef;
13typedef struct TQWorker TQWorker;
14typedef struct TQWorker_WeakRef TQWorker_WeakRef;
15saDeclarePtr(TQWorker);
16saDeclarePtr(TQWorker_WeakRef);
17#define _sti_TQWorker _sti_object
18#define SType_TQWorker TQWorker*
19#define STStorageType_TQWorker TQWorker*
20#define STypeArg_TQWorker(type, val) stgeneric(object, (ObjInst*)objInstCheckClass(TQWorker, val))
21#define STypeArgPtr_TQWorker(type, val) (stgeneric*)objInstCheckClassPtr(TQWorker, val)
22#define STypeCheckedArg_TQWorker(type, val) stType(type), stArg(type, val)
23#define STypeCheckedPtrArg_TQWorker(type, val) stType(type), stArgPtr(type, val)
24
25typedef struct TQWorker_ClassIf {
26 ObjIface* _implements;
27 ObjIface* _parent;
28 size_t _size;
29
30 // hooks for derived classes to override if desired
31 // worker is starting up
32 void (*onStart)(_In_ void* self, _In_ TaskQueue* tq);
33 // worker should process tasks (call parent!)
34 int64 (*tick)(_In_ void* self, _In_ TaskQueue* tq);
35 // worker is shutting down
36 void (*onStop)(_In_ void* self, _In_ TaskQueue* tq);
37} TQWorker_ClassIf;
38extern TQWorker_ClassIf TQWorker_ClassIf_tmpl;
39
40typedef struct TQWorker {
41 union {
42 TQWorker_ClassIf* _;
43 void* _is_TQWorker;
44 void* _is_ObjInst;
45 };
46 ObjClassInfo* _clsinfo;
47 atomic(uintptr) _ref;
48 atomic(ptr) _weakref;
49
50} TQWorker;
51extern ObjClassInfo TQWorker_clsinfo;
52#define TQWorker(inst) objInstCheckClass(TQWorker, inst)
53#define TQWorkerNone ((TQWorker*)NULL)
54
55typedef struct TQWorker_WeakRef {
56 union {
57 ObjInst* _inst;
58 void* _is_TQWorker_WeakRef;
59 void* _is_ObjInst_WeakRef;
60 };
61 atomic(uintptr) _ref;
62 RWLock _lock;
63} TQWorker_WeakRef;
64#define TQWorker_WeakRef(inst) objWeakRefCheckClass(TQWorker, inst)
65
66// void tqworkerOnStart(TQWorker* self, TaskQueue* tq);
67//
68// hooks for derived classes to override if desired
69// worker is starting up
70#define tqworkerOnStart(self, tq) (self)->_->onStart(TQWorker(self), TaskQueue(tq))
71// int64 tqworkerTick(TQWorker* self, TaskQueue* tq);
72//
73// worker should process tasks (call parent!)
74#define tqworkerTick(self, tq) (self)->_->tick(TQWorker(self), TaskQueue(tq))
75// void tqworkerOnStop(TQWorker* self, TaskQueue* tq);
76//
77// worker is shutting down
78#define tqworkerOnStop(self, tq) (self)->_->onStop(TQWorker(self), TaskQueue(tq))
79
80CX_C_END
#define saDeclarePtr(name)
Definition sarray.h:100
CX Struct System - Introspectable, serializable POD structures in C.
CX Object System - Object-oriented programming in C.
Shared types and configuration structures for the task queue system.