CX Framework
Cross-platform C utility framework
Loading...
Searching...
No Matches
ssdarraynode.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>
7#include <cx/ssdtree/node/ssdnode.h>
8
9CX_C_BEGIN
10
11typedef struct SSDArrayNode SSDArrayNode;
12typedef struct SSDArrayNode_WeakRef SSDArrayNode_WeakRef;
13typedef struct SSDArrayIter SSDArrayIter;
14typedef struct SSDArrayIter_WeakRef SSDArrayIter_WeakRef;
15saDeclarePtr(SSDArrayNode);
16saDeclarePtr(SSDArrayNode_WeakRef);
17#define _sti_SSDArrayNode _sti_object
18#define SType_SSDArrayNode SSDArrayNode*
19#define STStorageType_SSDArrayNode SSDArrayNode*
20#define STypeArg_SSDArrayNode(type, val) stgeneric(object, (ObjInst*)objInstCheckClass(SSDArrayNode, val))
21#define STypeArgPtr_SSDArrayNode(type, val) (stgeneric*)objInstCheckClassPtr(SSDArrayNode, val)
22#define STypeCheckedArg_SSDArrayNode(type, val) stType(type), stArg(type, val)
23#define STypeCheckedPtrArg_SSDArrayNode(type, val) stType(type), stArgPtr(type, val)
24saDeclarePtr(SSDArrayIter);
25saDeclarePtr(SSDArrayIter_WeakRef);
26#define _sti_SSDArrayIter _sti_object
27#define SType_SSDArrayIter SSDArrayIter*
28#define STStorageType_SSDArrayIter SSDArrayIter*
29#define STypeArg_SSDArrayIter(type, val) stgeneric(object, (ObjInst*)objInstCheckClass(SSDArrayIter, val))
30#define STypeArgPtr_SSDArrayIter(type, val) (stgeneric*)objInstCheckClassPtr(SSDArrayIter, val)
31#define STypeCheckedArg_SSDArrayIter(type, val) stType(type), stArg(type, val)
32#define STypeCheckedPtrArg_SSDArrayIter(type, val) stType(type), stArgPtr(type, val)
33
34typedef struct SSDArrayNode_ClassIf {
35 ObjIface* _implements;
36 ObjIface* _parent;
37 size_t _size;
38
39 // This node is an object that contains values or objects by name
40 bool (*isHashtable)(_In_ void* self);
41 // This node is an array that contains values or objects by array index
42 bool (*isArray)(_In_ void* self);
43 // Gets a value. Caller owns the value and must destroy it with stDestroy!
44 bool (*get)(_In_ void* self, int32 idx, _In_opt_ strref name, _When_(return == true, _Out_) stvar* out, _Inout_ SSDLockState* _ssdCurrentLockState);
45 // Gets a pointer to a value. This points to the internal storage within the node
46 // so it is only guaranteed to be valid while the read lock is held.
47 _Ret_opt_valid_ stvar* (*ptr)(_In_ void* self, int32 idx, _In_opt_ strref name, _Inout_ SSDLockState* _ssdCurrentLockState);
48 // Sets the given value
49 bool (*set)(_In_ void* self, int32 idx, _In_opt_ strref name, stvar val, _Inout_ SSDLockState* _ssdCurrentLockState);
50 // Same as setValue but consumes the value
51 // (consumes even on failure)
52 bool (*setC)(_In_ void* self, int32 idx, _In_opt_ strref name, _Inout_ stvar* val, _Inout_ SSDLockState* _ssdCurrentLockState);
53 // Removes a value
54 bool (*remove)(_In_ void* self, int32 idx, _In_opt_ strref name, _Inout_ SSDLockState* _ssdCurrentLockState);
55 // How many values / objects does this node contain?
56 int32 (*count)(_In_ void* self, _Inout_ SSDLockState* _ssdCurrentLockState);
57 // IMPORTANT NOTE: The generic object iterator interface cannot take any parameters;
58 // thus it always acquires a transient read lock and holds it until the iterator is
59 // destroyed. The caller MUST NOT already have an SSDLock held.
60 // If you want to use iterators inside a larger locked transaction or modify the tree,
61 // use iterLocked() instead.
62 _Ret_valid_ SSDIterator* (*iter)(_In_ void* self);
63 SSDIterator* (*_iterLocked)(_In_ void* self, _Inout_ SSDLockState* _ssdCurrentLockState);
64 bool (*append)(_In_ void* self, stvar val, SSDLockState* _ssdCurrentLockState);
65} SSDArrayNode_ClassIf;
66extern SSDArrayNode_ClassIf SSDArrayNode_ClassIf_tmpl;
67
68typedef struct SSDArrayIter_ClassIf {
69 ObjIface* _implements;
70 ObjIface* _parent;
71 size_t _size;
72
73 bool (*isHashtable)(_In_ void* self);
74 bool (*isArray)(_In_ void* self);
75 bool (*valid)(_In_ void* self);
76 bool (*next)(_In_ void* self);
77 bool (*get)(_In_ void* self, stvar* out);
78 stvar* (*ptr)(_In_ void* self);
79 strref (*name)(_In_ void* self);
80 int32 (*idx)(_In_ void* self);
81 bool (*iterOut)(_In_ void* self, _When_(return == true, _Out_) int32* idx, _When_(return == true, _Out_) strref* name, _When_(return == true, _Out_) stvar** val);
82} SSDArrayIter_ClassIf;
83extern SSDArrayIter_ClassIf SSDArrayIter_ClassIf_tmpl;
84
85typedef struct SSDArrayNode {
86 union {
87 SSDArrayNode_ClassIf* _;
88 void* _is_SSDArrayNode;
89 void* _is_SSDNode;
90 void* _is_ObjInst;
91 };
92 ObjClassInfo* _clsinfo;
93 atomic(uintptr) _ref;
94 atomic(ptr) _weakref;
95
96 SSDTree* tree;
97 int64 modified; // The timestamp this node was last modified
98 sa_stvar storage;
99} SSDArrayNode;
100extern ObjClassInfo SSDArrayNode_clsinfo;
101#define SSDArrayNode(inst) objInstCheckClass(SSDArrayNode, inst)
102#define SSDArrayNodeNone ((SSDArrayNode*)NULL)
103
104typedef struct SSDArrayNode_WeakRef {
105 union {
106 ObjInst* _inst;
107 void* _is_SSDArrayNode_WeakRef;
108 void* _is_SSDNode_WeakRef;
109 void* _is_ObjInst_WeakRef;
110 };
111 atomic(uintptr) _ref;
112 RWLock _lock;
113} SSDArrayNode_WeakRef;
114#define SSDArrayNode_WeakRef(inst) objWeakRefCheckClass(SSDArrayNode, inst)
115
116_objfactory_guaranteed SSDArrayNode* SSDArrayNode__create(SSDTree* tree);
117// SSDArrayNode* ssdarraynode_create(SSDTree* tree);
118#define ssdarraynode_create(tree) SSDArrayNode__create(SSDTree(tree))
119
120// void ssdarraynodeUpdateModified(SSDArrayNode* self);
121#define ssdarraynodeUpdateModified(self) SSDNode_updateModified(SSDNode(self))
122
123// bool ssdarraynodeIsHashtable(SSDArrayNode* self);
124//
125// This node is an object that contains values or objects by name
126#define ssdarraynodeIsHashtable(self) (self)->_->isHashtable(SSDArrayNode(self))
127// bool ssdarraynodeIsArray(SSDArrayNode* self);
128//
129// This node is an array that contains values or objects by array index
130#define ssdarraynodeIsArray(self) (self)->_->isArray(SSDArrayNode(self))
131// bool ssdarraynodeGet(SSDArrayNode* self, int32 idx, strref name, stvar* out, SSDLockState* _ssdCurrentLockState);
132//
133// Gets a value. Caller owns the value and must destroy it with stDestroy!
134#define ssdarraynodeGet(self, idx, name, out, _ssdCurrentLockState) (self)->_->get(SSDArrayNode(self), idx, name, out, _ssdCurrentLockState)
135// stvar* ssdarraynodePtr(SSDArrayNode* self, int32 idx, strref name, SSDLockState* _ssdCurrentLockState);
136//
137// Gets a pointer to a value. This points to the internal storage within the node
138// so it is only guaranteed to be valid while the read lock is held.
139#define ssdarraynodePtr(self, idx, name, _ssdCurrentLockState) (self)->_->ptr(SSDArrayNode(self), idx, name, _ssdCurrentLockState)
140// bool ssdarraynodeSet(SSDArrayNode* self, int32 idx, strref name, stvar val, SSDLockState* _ssdCurrentLockState);
141//
142// Sets the given value
143#define ssdarraynodeSet(self, idx, name, val, _ssdCurrentLockState) (self)->_->set(SSDArrayNode(self), idx, name, val, _ssdCurrentLockState)
144// bool ssdarraynodeSetC(SSDArrayNode* self, int32 idx, strref name, stvar* val, SSDLockState* _ssdCurrentLockState);
145//
146// Same as setValue but consumes the value
147// (consumes even on failure)
148#define ssdarraynodeSetC(self, idx, name, val, _ssdCurrentLockState) (self)->_->setC(SSDArrayNode(self), idx, name, val, _ssdCurrentLockState)
149// bool ssdarraynodeRemove(SSDArrayNode* self, int32 idx, strref name, SSDLockState* _ssdCurrentLockState);
150//
151// Removes a value
152#define ssdarraynodeRemove(self, idx, name, _ssdCurrentLockState) (self)->_->remove(SSDArrayNode(self), idx, name, _ssdCurrentLockState)
153// int32 ssdarraynodeCount(SSDArrayNode* self, SSDLockState* _ssdCurrentLockState);
154//
155// How many values / objects does this node contain?
156#define ssdarraynodeCount(self, _ssdCurrentLockState) (self)->_->count(SSDArrayNode(self), _ssdCurrentLockState)
157// SSDIterator* ssdarraynodeIter(SSDArrayNode* self);
158//
159// IMPORTANT NOTE: The generic object iterator interface cannot take any parameters;
160// thus it always acquires a transient read lock and holds it until the iterator is
161// destroyed. The caller MUST NOT already have an SSDLock held.
162// If you want to use iterators inside a larger locked transaction or modify the tree,
163// use iterLocked() instead.
164#define ssdarraynodeIter(self) (self)->_->iter(SSDArrayNode(self))
165// SSDIterator* ssdarraynode_iterLocked(SSDArrayNode* self, SSDLockState* _ssdCurrentLockState);
166#define ssdarraynode_iterLocked(self, _ssdCurrentLockState) (self)->_->_iterLocked(SSDArrayNode(self), _ssdCurrentLockState)
167// bool ssdarraynodeAppend(SSDArrayNode* self, stvar val, SSDLockState* _ssdCurrentLockState);
168#define ssdarraynodeAppend(self, val, _ssdCurrentLockState) (self)->_->append(SSDArrayNode(self), val, _ssdCurrentLockState)
169
170typedef struct SSDArrayIter {
171 union {
172 SSDArrayIter_ClassIf* _;
173 void* _is_SSDArrayIter;
174 void* _is_SSDIterator;
175 void* _is_ObjInst;
176 };
177 ObjClassInfo* _clsinfo;
178 atomic(uintptr) _ref;
179 atomic(ptr) _weakref;
180
181 SSDNode* node;
182 SSDLockState* lstate;
183 SSDLockState transient_lock_state;
184 int32 idx;
185 string lastName;
186} SSDArrayIter;
187extern ObjClassInfo SSDArrayIter_clsinfo;
188#define SSDArrayIter(inst) objInstCheckClass(SSDArrayIter, inst)
189#define SSDArrayIterNone ((SSDArrayIter*)NULL)
190
191typedef struct SSDArrayIter_WeakRef {
192 union {
193 ObjInst* _inst;
194 void* _is_SSDArrayIter_WeakRef;
195 void* _is_SSDIterator_WeakRef;
196 void* _is_ObjInst_WeakRef;
197 };
198 atomic(uintptr) _ref;
199 RWLock _lock;
200} SSDArrayIter_WeakRef;
201#define SSDArrayIter_WeakRef(inst) objWeakRefCheckClass(SSDArrayIter, inst)
202
203_objfactory_guaranteed SSDArrayIter* SSDArrayIter_create(SSDArrayNode* node, SSDLockState* lstate);
204// SSDArrayIter* ssdarrayiterCreate(SSDArrayNode* node, SSDLockState* lstate);
205#define ssdarrayiterCreate(node, lstate) SSDArrayIter_create(SSDArrayNode(node), lstate)
206
207// ObjInst* ssdarrayiterObjInst(SSDArrayIter* self);
208#define ssdarrayiterObjInst(self) SSDIterator_objInst(SSDIterator(self))
209
210// bool ssdarrayiterIsHashtable(SSDArrayIter* self);
211#define ssdarrayiterIsHashtable(self) (self)->_->isHashtable(SSDArrayIter(self))
212// bool ssdarrayiterIsArray(SSDArrayIter* self);
213#define ssdarrayiterIsArray(self) (self)->_->isArray(SSDArrayIter(self))
214// bool ssdarrayiterValid(SSDArrayIter* self);
215#define ssdarrayiterValid(self) (self)->_->valid(SSDArrayIter(self))
216// bool ssdarrayiterNext(SSDArrayIter* self);
217#define ssdarrayiterNext(self) (self)->_->next(SSDArrayIter(self))
218// bool ssdarrayiterGet(SSDArrayIter* self, stvar* out);
219#define ssdarrayiterGet(self, out) (self)->_->get(SSDArrayIter(self), out)
220// stvar* ssdarrayiterPtr(SSDArrayIter* self);
221#define ssdarrayiterPtr(self) (self)->_->ptr(SSDArrayIter(self))
222// strref ssdarrayiterName(SSDArrayIter* self);
223#define ssdarrayiterName(self) (self)->_->name(SSDArrayIter(self))
224// int32 ssdarrayiterIdx(SSDArrayIter* self);
225#define ssdarrayiterIdx(self) (self)->_->idx(SSDArrayIter(self))
226// bool ssdarrayiterIterOut(SSDArrayIter* self, int32* idx, strref* name, stvar** val);
227#define ssdarrayiterIterOut(self, idx, name, val) (self)->_->iterOut(SSDArrayIter(self), idx, name, val)
228
229CX_C_END
#define saDeclarePtr(name)
Definition sarray.h:100
#define _objfactory_guaranteed
Definition objimpl.h:106
#define stvar(typen, val)
Definition stvar.h:162
CX Struct System - Introspectable, serializable POD structures in C.
CX Object System - Object-oriented programming in C.