7#include <cx/ssdtree/node/ssdnode.h>
11typedef struct SSDArrayNode SSDArrayNode;
12typedef struct SSDArrayNode_WeakRef SSDArrayNode_WeakRef;
13typedef struct SSDArrayIter SSDArrayIter;
14typedef struct SSDArrayIter_WeakRef SSDArrayIter_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)
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)
34typedef struct SSDArrayNode_ClassIf {
40 bool (*isHashtable)(_In_
void* self);
42 bool (*isArray)(_In_
void* self);
44 bool (*get)(_In_
void* self, int32 idx, _In_opt_ strref name, _When_(
return ==
true, _Out_)
stvar* out, _Inout_ SSDLockState* _ssdCurrentLockState);
47 _Ret_opt_valid_
stvar* (*ptr)(_In_
void* self, int32 idx, _In_opt_ strref name, _Inout_ SSDLockState* _ssdCurrentLockState);
49 bool (*set)(_In_
void* self, int32 idx, _In_opt_ strref name,
stvar val, _Inout_ SSDLockState* _ssdCurrentLockState);
52 bool (*setC)(_In_
void* self, int32 idx, _In_opt_ strref name, _Inout_
stvar* val, _Inout_ SSDLockState* _ssdCurrentLockState);
54 bool (*remove)(_In_
void* self, int32 idx, _In_opt_ strref name, _Inout_ SSDLockState* _ssdCurrentLockState);
56 int32 (*count)(_In_
void* self, _Inout_ SSDLockState* _ssdCurrentLockState);
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;
68typedef struct SSDArrayIter_ClassIf {
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;
85typedef struct SSDArrayNode {
87 SSDArrayNode_ClassIf* _;
88 void* _is_SSDArrayNode;
101#define SSDArrayNode(inst) objInstCheckClass(SSDArrayNode, inst)
102#define SSDArrayNodeNone ((SSDArrayNode*)NULL)
104typedef struct SSDArrayNode_WeakRef {
107 void* _is_SSDArrayNode_WeakRef;
108 void* _is_SSDNode_WeakRef;
109 void* _is_ObjInst_WeakRef;
111 atomic(uintptr) _ref;
113} SSDArrayNode_WeakRef;
114#define SSDArrayNode_WeakRef(inst) objWeakRefCheckClass(SSDArrayNode, inst)
118#define ssdarraynode_create(tree) SSDArrayNode__create(SSDTree(tree))
121#define ssdarraynodeUpdateModified(self) SSDNode_updateModified(SSDNode(self))
126#define ssdarraynodeIsHashtable(self) (self)->_->isHashtable(SSDArrayNode(self))
130#define ssdarraynodeIsArray(self) (self)->_->isArray(SSDArrayNode(self))
134#define ssdarraynodeGet(self, idx, name, out, _ssdCurrentLockState) (self)->_->get(SSDArrayNode(self), idx, name, out, _ssdCurrentLockState)
139#define ssdarraynodePtr(self, idx, name, _ssdCurrentLockState) (self)->_->ptr(SSDArrayNode(self), idx, name, _ssdCurrentLockState)
143#define ssdarraynodeSet(self, idx, name, val, _ssdCurrentLockState) (self)->_->set(SSDArrayNode(self), idx, name, val, _ssdCurrentLockState)
148#define ssdarraynodeSetC(self, idx, name, val, _ssdCurrentLockState) (self)->_->setC(SSDArrayNode(self), idx, name, val, _ssdCurrentLockState)
152#define ssdarraynodeRemove(self, idx, name, _ssdCurrentLockState) (self)->_->remove(SSDArrayNode(self), idx, name, _ssdCurrentLockState)
156#define ssdarraynodeCount(self, _ssdCurrentLockState) (self)->_->count(SSDArrayNode(self), _ssdCurrentLockState)
164#define ssdarraynodeIter(self) (self)->_->iter(SSDArrayNode(self))
166#define ssdarraynode_iterLocked(self, _ssdCurrentLockState) (self)->_->_iterLocked(SSDArrayNode(self), _ssdCurrentLockState)
168#define ssdarraynodeAppend(self, val, _ssdCurrentLockState) (self)->_->append(SSDArrayNode(self), val, _ssdCurrentLockState)
170typedef struct SSDArrayIter {
172 SSDArrayIter_ClassIf* _;
173 void* _is_SSDArrayIter;
174 void* _is_SSDIterator;
178 atomic(uintptr) _ref;
179 atomic(ptr) _weakref;
182 SSDLockState* lstate;
183 SSDLockState transient_lock_state;
188#define SSDArrayIter(inst) objInstCheckClass(SSDArrayIter, inst)
189#define SSDArrayIterNone ((SSDArrayIter*)NULL)
191typedef struct SSDArrayIter_WeakRef {
194 void* _is_SSDArrayIter_WeakRef;
195 void* _is_SSDIterator_WeakRef;
196 void* _is_ObjInst_WeakRef;
198 atomic(uintptr) _ref;
200} SSDArrayIter_WeakRef;
201#define SSDArrayIter_WeakRef(inst) objWeakRefCheckClass(SSDArrayIter, inst)
205#define ssdarrayiterCreate(node, lstate) SSDArrayIter_create(SSDArrayNode(node), lstate)
208#define ssdarrayiterObjInst(self) SSDIterator_objInst(SSDIterator(self))
211#define ssdarrayiterIsHashtable(self) (self)->_->isHashtable(SSDArrayIter(self))
213#define ssdarrayiterIsArray(self) (self)->_->isArray(SSDArrayIter(self))
215#define ssdarrayiterValid(self) (self)->_->valid(SSDArrayIter(self))
217#define ssdarrayiterNext(self) (self)->_->next(SSDArrayIter(self))
219#define ssdarrayiterGet(self, out) (self)->_->get(SSDArrayIter(self), out)
221#define ssdarrayiterPtr(self) (self)->_->ptr(SSDArrayIter(self))
223#define ssdarrayiterName(self) (self)->_->name(SSDArrayIter(self))
225#define ssdarrayiterIdx(self) (self)->_->idx(SSDArrayIter(self))
227#define ssdarrayiterIterOut(self, idx, name, val) (self)->_->iterOut(SSDArrayIter(self), idx, name, val)
#define saDeclarePtr(name)
#define _objfactory_guaranteed
#define stvar(typen, val)
CX Struct System - Introspectable, serializable POD structures in C.
CX Object System - Object-oriented programming in C.