7#include <cx/ssdtree/node/ssdnode.h>
11typedef struct SSDSingleNode SSDSingleNode;
12typedef struct SSDSingleNode_WeakRef SSDSingleNode_WeakRef;
13typedef struct SSDSingleIter SSDSingleIter;
14typedef struct SSDSingleIter_WeakRef SSDSingleIter_WeakRef;
17#define _sti_SSDSingleNode _sti_object
18#define SType_SSDSingleNode SSDSingleNode*
19#define STStorageType_SSDSingleNode SSDSingleNode*
20#define STypeArg_SSDSingleNode(type, val) stgeneric(object, (ObjInst*)objInstCheckClass(SSDSingleNode, val))
21#define STypeArgPtr_SSDSingleNode(type, val) (stgeneric*)objInstCheckClassPtr(SSDSingleNode, val)
22#define STypeCheckedArg_SSDSingleNode(type, val) stType(type), stArg(type, val)
23#define STypeCheckedPtrArg_SSDSingleNode(type, val) stType(type), stArgPtr(type, val)
26#define _sti_SSDSingleIter _sti_object
27#define SType_SSDSingleIter SSDSingleIter*
28#define STStorageType_SSDSingleIter SSDSingleIter*
29#define STypeArg_SSDSingleIter(type, val) stgeneric(object, (ObjInst*)objInstCheckClass(SSDSingleIter, val))
30#define STypeArgPtr_SSDSingleIter(type, val) (stgeneric*)objInstCheckClassPtr(SSDSingleIter, val)
31#define STypeCheckedArg_SSDSingleIter(type, val) stType(type), stArg(type, val)
32#define STypeCheckedPtrArg_SSDSingleIter(type, val) stType(type), stArgPtr(type, val)
34typedef struct SSDSingleNode_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} SSDSingleNode_ClassIf;
65extern SSDSingleNode_ClassIf SSDSingleNode_ClassIf_tmpl;
67typedef struct SSDSingleIter_ClassIf {
72 bool (*isHashtable)(_In_
void* self);
73 bool (*isArray)(_In_
void* self);
74 bool (*valid)(_In_
void* self);
75 bool (*next)(_In_
void* self);
76 bool (*get)(_In_
void* self,
stvar* out);
77 stvar* (*ptr)(_In_
void* self);
78 strref (*name)(_In_
void* self);
79 int32 (*idx)(_In_
void* self);
80 bool (*iterOut)(_In_
void* self, _When_(
return ==
true, _Out_) int32* idx, _When_(
return ==
true, _Out_) strref* name, _When_(
return ==
true, _Out_)
stvar** val);
81} SSDSingleIter_ClassIf;
82extern SSDSingleIter_ClassIf SSDSingleIter_ClassIf_tmpl;
84typedef struct SSDSingleNode {
86 SSDSingleNode_ClassIf* _;
87 void* _is_SSDSingleNode;
100#define SSDSingleNode(inst) objInstCheckClass(SSDSingleNode, inst)
101#define SSDSingleNodeNone ((SSDSingleNode*)NULL)
103typedef struct SSDSingleNode_WeakRef {
106 void* _is_SSDSingleNode_WeakRef;
107 void* _is_SSDNode_WeakRef;
108 void* _is_ObjInst_WeakRef;
110 atomic(uintptr) _ref;
112} SSDSingleNode_WeakRef;
113#define SSDSingleNode_WeakRef(inst) objWeakRefCheckClass(SSDSingleNode, inst)
117#define ssdsinglenode_create(tree) SSDSingleNode__create(SSDTree(tree))
120#define ssdsinglenodeUpdateModified(self) SSDNode_updateModified(SSDNode(self))
125#define ssdsinglenodeIsHashtable(self) (self)->_->isHashtable(SSDSingleNode(self))
129#define ssdsinglenodeIsArray(self) (self)->_->isArray(SSDSingleNode(self))
133#define ssdsinglenodeGet(self, idx, name, out, _ssdCurrentLockState) (self)->_->get(SSDSingleNode(self), idx, name, out, _ssdCurrentLockState)
138#define ssdsinglenodePtr(self, idx, name, _ssdCurrentLockState) (self)->_->ptr(SSDSingleNode(self), idx, name, _ssdCurrentLockState)
142#define ssdsinglenodeSet(self, idx, name, val, _ssdCurrentLockState) (self)->_->set(SSDSingleNode(self), idx, name, val, _ssdCurrentLockState)
147#define ssdsinglenodeSetC(self, idx, name, val, _ssdCurrentLockState) (self)->_->setC(SSDSingleNode(self), idx, name, val, _ssdCurrentLockState)
151#define ssdsinglenodeRemove(self, idx, name, _ssdCurrentLockState) (self)->_->remove(SSDSingleNode(self), idx, name, _ssdCurrentLockState)
155#define ssdsinglenodeCount(self, _ssdCurrentLockState) (self)->_->count(SSDSingleNode(self), _ssdCurrentLockState)
163#define ssdsinglenodeIter(self) (self)->_->iter(SSDSingleNode(self))
165#define ssdsinglenode_iterLocked(self, _ssdCurrentLockState) (self)->_->_iterLocked(SSDSingleNode(self), _ssdCurrentLockState)
167typedef struct SSDSingleIter {
169 SSDSingleIter_ClassIf* _;
170 void* _is_SSDSingleIter;
171 void* _is_SSDIterator;
175 atomic(uintptr) _ref;
176 atomic(ptr) _weakref;
179 SSDLockState* lstate;
180 SSDLockState transient_lock_state;
184#define SSDSingleIter(inst) objInstCheckClass(SSDSingleIter, inst)
185#define SSDSingleIterNone ((SSDSingleIter*)NULL)
187typedef struct SSDSingleIter_WeakRef {
190 void* _is_SSDSingleIter_WeakRef;
191 void* _is_SSDIterator_WeakRef;
192 void* _is_ObjInst_WeakRef;
194 atomic(uintptr) _ref;
196} SSDSingleIter_WeakRef;
197#define SSDSingleIter_WeakRef(inst) objWeakRefCheckClass(SSDSingleIter, inst)
201#define ssdsingleiterCreate(node, lstate) SSDSingleIter_create(SSDSingleNode(node), lstate)
204#define ssdsingleiterObjInst(self) SSDIterator_objInst(SSDIterator(self))
207#define ssdsingleiterIsHashtable(self) (self)->_->isHashtable(SSDSingleIter(self))
209#define ssdsingleiterIsArray(self) (self)->_->isArray(SSDSingleIter(self))
211#define ssdsingleiterValid(self) (self)->_->valid(SSDSingleIter(self))
213#define ssdsingleiterNext(self) (self)->_->next(SSDSingleIter(self))
215#define ssdsingleiterGet(self, out) (self)->_->get(SSDSingleIter(self), out)
217#define ssdsingleiterPtr(self) (self)->_->ptr(SSDSingleIter(self))
219#define ssdsingleiterName(self) (self)->_->name(SSDSingleIter(self))
221#define ssdsingleiterIdx(self) (self)->_->idx(SSDSingleIter(self))
223#define ssdsingleiterIterOut(self, idx, name, val) (self)->_->iterOut(SSDSingleIter(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.