7#include <cx/ssdtree/ssdtreeobj.h>
12typedef struct SSDIterator SSDIterator;
13typedef struct SSDIterator_WeakRef SSDIterator_WeakRef;
14typedef struct SSDNode SSDNode;
15typedef struct SSDNode_WeakRef SSDNode_WeakRef;
18#define _sti_SSDIterator _sti_object
19#define SType_SSDIterator SSDIterator*
20#define STStorageType_SSDIterator SSDIterator*
21#define STypeArg_SSDIterator(type, val) stgeneric(object, (ObjInst*)objInstCheckClass(SSDIterator, val))
22#define STypeArgPtr_SSDIterator(type, val) (stgeneric*)objInstCheckClassPtr(SSDIterator, val)
23#define STypeCheckedArg_SSDIterator(type, val) stType(type), stArg(type, val)
24#define STypeCheckedPtrArg_SSDIterator(type, val) stType(type), stArgPtr(type, val)
27#define _sti_SSDNode _sti_object
28#define SType_SSDNode SSDNode*
29#define STStorageType_SSDNode SSDNode*
30#define STypeArg_SSDNode(type, val) stgeneric(object, (ObjInst*)objInstCheckClass(SSDNode, val))
31#define STypeArgPtr_SSDNode(type, val) (stgeneric*)objInstCheckClassPtr(SSDNode, val)
32#define STypeCheckedArg_SSDNode(type, val) stType(type), stArg(type, val)
33#define STypeCheckedPtrArg_SSDNode(type, val) stType(type), stArgPtr(type, val)
35enum SSD_INDEX_MARKER {
39#define ssditeratorObj(self, clsname) objDynCast(clsname, ssditeratorObjInst(self))
40#define ssdnodeIterLocked(self) ssdnode_iterLocked(self, _ssdCurrentLockState)
42typedef struct SSDIteratorIf {
47 bool (*valid)(_In_
void* self);
48 bool (*next)(_In_
void* self);
49 bool (*get)(_In_
void* self,
stvar* out);
50 stvar* (*ptr)(_In_
void* self);
51 strref (*name)(_In_
void* self);
52 int32 (*idx)(_In_
void* self);
53 bool (*iterOut)(_In_
void* self, _When_(
return ==
true, _Out_) int32* idx, _When_(
return ==
true, _Out_) strref* name, _When_(
return ==
true, _Out_)
stvar** val);
55extern SSDIteratorIf SSDIteratorIf_tmpl;
57typedef struct SSDNodeIf {
63 bool (*get)(_In_
void* self, int32 idx, _In_opt_ strref name, _When_(
return ==
true, _Out_)
stvar* out, _Inout_ SSDLockState* _ssdCurrentLockState);
66 _Ret_opt_valid_
stvar* (*ptr)(_In_
void* self, int32 idx, _In_opt_ strref name, _Inout_ SSDLockState* _ssdCurrentLockState);
68 bool (*set)(_In_
void* self, int32 idx, _In_opt_ strref name,
stvar val, _Inout_ SSDLockState* _ssdCurrentLockState);
71 bool (*setC)(_In_
void* self, int32 idx, _In_opt_ strref name, _Inout_
stvar* val, _Inout_ SSDLockState* _ssdCurrentLockState);
73 bool (*remove)(_In_
void* self, int32 idx, _In_opt_ strref name, _Inout_ SSDLockState* _ssdCurrentLockState);
75 int32 (*count)(_In_
void* self, _Inout_ SSDLockState* _ssdCurrentLockState);
81 _Ret_valid_ SSDIterator* (*iter)(_In_
void* self);
82 SSDIterator* (*_iterLocked)(_In_
void* self, _Inout_ SSDLockState* _ssdCurrentLockState);
84extern SSDNodeIf SSDNodeIf_tmpl;
86typedef struct SSDIterator_ClassIf {
91 bool (*isHashtable)(_In_
void* self);
92 bool (*isArray)(_In_
void* self);
93 bool (*valid)(_In_
void* self);
94 bool (*next)(_In_
void* self);
95 bool (*get)(_In_
void* self,
stvar* out);
96 stvar* (*ptr)(_In_
void* self);
97 strref (*name)(_In_
void* self);
98 int32 (*idx)(_In_
void* self);
99 bool (*iterOut)(_In_
void* self, _When_(
return ==
true, _Out_) int32* idx, _When_(
return ==
true, _Out_) strref* name, _When_(
return ==
true, _Out_)
stvar** val);
100} SSDIterator_ClassIf;
101extern SSDIterator_ClassIf SSDIterator_ClassIf_tmpl;
103typedef struct SSDNode_ClassIf {
109 bool (*isHashtable)(_In_
void* self);
111 bool (*isArray)(_In_
void* self);
113 bool (*get)(_In_
void* self, int32 idx, _In_opt_ strref name, _When_(
return ==
true, _Out_)
stvar* out, _Inout_ SSDLockState* _ssdCurrentLockState);
116 _Ret_opt_valid_
stvar* (*ptr)(_In_
void* self, int32 idx, _In_opt_ strref name, _Inout_ SSDLockState* _ssdCurrentLockState);
118 bool (*set)(_In_
void* self, int32 idx, _In_opt_ strref name,
stvar val, _Inout_ SSDLockState* _ssdCurrentLockState);
121 bool (*setC)(_In_
void* self, int32 idx, _In_opt_ strref name, _Inout_
stvar* val, _Inout_ SSDLockState* _ssdCurrentLockState);
123 bool (*remove)(_In_
void* self, int32 idx, _In_opt_ strref name, _Inout_ SSDLockState* _ssdCurrentLockState);
125 int32 (*count)(_In_
void* self, _Inout_ SSDLockState* _ssdCurrentLockState);
131 _Ret_valid_ SSDIterator* (*iter)(_In_
void* self);
132 SSDIterator* (*_iterLocked)(_In_
void* self, _Inout_ SSDLockState* _ssdCurrentLockState);
134extern SSDNode_ClassIf SSDNode_ClassIf_tmpl;
136typedef struct SSDIterator {
138 SSDIterator_ClassIf* _;
139 void* _is_SSDIterator;
143 atomic(uintptr) _ref;
144 atomic(ptr) _weakref;
147 SSDLockState* lstate;
148 SSDLockState transient_lock_state;
151#define SSDIterator(inst) objInstCheckClass(SSDIterator, inst)
152#define SSDIteratorNone ((SSDIterator*)NULL)
154typedef struct SSDIterator_WeakRef {
157 void* _is_SSDIterator_WeakRef;
158 void* _is_ObjInst_WeakRef;
160 atomic(uintptr) _ref;
162} SSDIterator_WeakRef;
163#define SSDIterator_WeakRef(inst) objWeakRefCheckClass(SSDIterator, inst)
165_Ret_opt_valid_
ObjInst* SSDIterator_objInst(_In_ SSDIterator* self);
167#define ssditeratorObjInst(self) SSDIterator_objInst(SSDIterator(self))
170#define ssditeratorIsHashtable(self) (self)->_->isHashtable(SSDIterator(self))
172#define ssditeratorIsArray(self) (self)->_->isArray(SSDIterator(self))
174#define ssditeratorValid(self) (self)->_->valid(SSDIterator(self))
176#define ssditeratorNext(self) (self)->_->next(SSDIterator(self))
178#define ssditeratorGet(self, out) (self)->_->get(SSDIterator(self), out)
180#define ssditeratorPtr(self) (self)->_->ptr(SSDIterator(self))
182#define ssditeratorName(self) (self)->_->name(SSDIterator(self))
184#define ssditeratorIdx(self) (self)->_->idx(SSDIterator(self))
186#define ssditeratorIterOut(self, idx, name, val) (self)->_->iterOut(SSDIterator(self), idx, name, val)
188typedef struct SSDNode {
195 atomic(uintptr) _ref;
196 atomic(ptr) _weakref;
202#define SSDNode(inst) objInstCheckClass(SSDNode, inst)
203#define SSDNodeNone ((SSDNode*)NULL)
205typedef struct SSDNode_WeakRef {
208 void* _is_SSDNode_WeakRef;
209 void* _is_ObjInst_WeakRef;
211 atomic(uintptr) _ref;
214#define SSDNode_WeakRef(inst) objWeakRefCheckClass(SSDNode, inst)
216void SSDNode_updateModified(_In_ SSDNode* self);
218#define ssdnodeUpdateModified(self) SSDNode_updateModified(SSDNode(self))
223#define ssdnodeIsHashtable(self) (self)->_->isHashtable(SSDNode(self))
227#define ssdnodeIsArray(self) (self)->_->isArray(SSDNode(self))
231#define ssdnodeGet(self, idx, name, out, _ssdCurrentLockState) (self)->_->get(SSDNode(self), idx, name, out, _ssdCurrentLockState)
236#define ssdnodePtr(self, idx, name, _ssdCurrentLockState) (self)->_->ptr(SSDNode(self), idx, name, _ssdCurrentLockState)
240#define ssdnodeSet(self, idx, name, val, _ssdCurrentLockState) (self)->_->set(SSDNode(self), idx, name, val, _ssdCurrentLockState)
245#define ssdnodeSetC(self, idx, name, val, _ssdCurrentLockState) (self)->_->setC(SSDNode(self), idx, name, val, _ssdCurrentLockState)
249#define ssdnodeRemove(self, idx, name, _ssdCurrentLockState) (self)->_->remove(SSDNode(self), idx, name, _ssdCurrentLockState)
253#define ssdnodeCount(self, _ssdCurrentLockState) (self)->_->count(SSDNode(self), _ssdCurrentLockState)
261#define ssdnodeIter(self) (self)->_->iter(SSDNode(self))
263#define ssdnode_iterLocked(self, _ssdCurrentLockState) (self)->_->_iterLocked(SSDNode(self), _ssdCurrentLockState)
#define saDeclarePtr(name)
#define stvar(typen, val)
CX Struct System - Introspectable, serializable POD structures in C.
CX Object System - Object-oriented programming in C.
Variant type containers and type-safe variadic argument support.