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