6#include <cx/ssdtree/node/ssdnode.h>
8typedef struct SSDSingleNode SSDSingleNode;
9typedef struct SSDSingleNode_WeakRef SSDSingleNode_WeakRef;
10typedef struct SSDSingleIter SSDSingleIter;
11typedef struct SSDSingleIter_WeakRef SSDSingleIter_WeakRef;
17typedef struct SSDSingleNode_ClassIf {
23 bool (*isHashtable)(_In_
void* self);
25 bool (*isArray)(_In_
void* self);
27 bool (*get)(_In_
void* self, int32 idx, _In_opt_ strref name, _When_(
return ==
true, _Out_)
stvar* out, _Inout_ SSDLockState* _ssdCurrentLockState);
30 _Ret_opt_valid_
stvar* (*ptr)(_In_
void* self, int32 idx, _In_opt_ strref name, _Inout_ SSDLockState* _ssdCurrentLockState);
32 bool (*set)(_In_
void* self, int32 idx, _In_opt_ strref name,
stvar val, _Inout_ SSDLockState* _ssdCurrentLockState);
35 bool (*setC)(_In_
void* self, int32 idx, _In_opt_ strref name, _Inout_
stvar* val, _Inout_ SSDLockState* _ssdCurrentLockState);
37 bool (*remove)(_In_
void* self, int32 idx, _In_opt_ strref name, _Inout_ SSDLockState* _ssdCurrentLockState);
39 int32 (*count)(_In_
void* self, _Inout_ SSDLockState* _ssdCurrentLockState);
45 _Ret_valid_ SSDIterator* (*iter)(_In_
void* self);
46 SSDIterator* (*_iterLocked)(_In_
void* self, _Inout_ SSDLockState* _ssdCurrentLockState);
47} SSDSingleNode_ClassIf;
48extern SSDSingleNode_ClassIf SSDSingleNode_ClassIf_tmpl;
50typedef struct SSDSingleIter_ClassIf {
55 bool (*isHashtable)(_In_
void* self);
56 bool (*isArray)(_In_
void* self);
57 bool (*valid)(_In_
void* self);
58 bool (*next)(_In_
void* self);
59 bool (*get)(_In_
void* self,
stvar* out);
60 stvar* (*ptr)(_In_
void* self);
61 strref (*name)(_In_
void* self);
62 int32 (*idx)(_In_
void* self);
63 bool (*iterOut)(_In_
void* self, _When_(
return ==
true, _Out_) int32* idx, _When_(
return ==
true, _Out_) strref* name, _When_(
return ==
true, _Out_)
stvar** val);
64} SSDSingleIter_ClassIf;
65extern SSDSingleIter_ClassIf SSDSingleIter_ClassIf_tmpl;
67typedef struct SSDSingleNode {
69 SSDSingleNode_ClassIf* _;
70 void* _is_SSDSingleNode;
83#define SSDSingleNode(inst) ((SSDSingleNode*)(unused_noeval((inst) && &((inst)->_is_SSDSingleNode)), (inst)))
84#define SSDSingleNodeNone ((SSDSingleNode*)NULL)
86typedef struct SSDSingleNode_WeakRef {
89 void* _is_SSDSingleNode_WeakRef;
90 void* _is_SSDNode_WeakRef;
91 void* _is_ObjInst_WeakRef;
95} SSDSingleNode_WeakRef;
96#define SSDSingleNode_WeakRef(inst) ((SSDSingleNode_WeakRef*)(unused_noeval((inst) && &((inst)->_is_SSDSingleNode_WeakRef)), (inst)))
100#define ssdsinglenode_create(tree) SSDSingleNode__create(SSDTree(tree))
103#define ssdsinglenodeUpdateModified(self) SSDNode_updateModified(SSDNode(self))
108#define ssdsinglenodeIsHashtable(self) (self)->_->isHashtable(SSDSingleNode(self))
112#define ssdsinglenodeIsArray(self) (self)->_->isArray(SSDSingleNode(self))
116#define ssdsinglenodeGet(self, idx, name, out, _ssdCurrentLockState) (self)->_->get(SSDSingleNode(self), idx, name, out, _ssdCurrentLockState)
121#define ssdsinglenodePtr(self, idx, name, _ssdCurrentLockState) (self)->_->ptr(SSDSingleNode(self), idx, name, _ssdCurrentLockState)
125#define ssdsinglenodeSet(self, idx, name, val, _ssdCurrentLockState) (self)->_->set(SSDSingleNode(self), idx, name, val, _ssdCurrentLockState)
130#define ssdsinglenodeSetC(self, idx, name, val, _ssdCurrentLockState) (self)->_->setC(SSDSingleNode(self), idx, name, val, _ssdCurrentLockState)
134#define ssdsinglenodeRemove(self, idx, name, _ssdCurrentLockState) (self)->_->remove(SSDSingleNode(self), idx, name, _ssdCurrentLockState)
138#define ssdsinglenodeCount(self, _ssdCurrentLockState) (self)->_->count(SSDSingleNode(self), _ssdCurrentLockState)
146#define ssdsinglenodeIter(self) (self)->_->iter(SSDSingleNode(self))
148#define ssdsinglenode_iterLocked(self, _ssdCurrentLockState) (self)->_->_iterLocked(SSDSingleNode(self), _ssdCurrentLockState)
150typedef struct SSDSingleIter {
152 SSDSingleIter_ClassIf* _;
153 void* _is_SSDSingleIter;
154 void* _is_SSDIterator;
158 atomic(uintptr) _ref;
159 atomic(ptr) _weakref;
162 SSDLockState* lstate;
163 SSDLockState transient_lock_state;
167#define SSDSingleIter(inst) ((SSDSingleIter*)(unused_noeval((inst) && &((inst)->_is_SSDSingleIter)), (inst)))
168#define SSDSingleIterNone ((SSDSingleIter*)NULL)
170typedef struct SSDSingleIter_WeakRef {
173 void* _is_SSDSingleIter_WeakRef;
174 void* _is_SSDIterator_WeakRef;
175 void* _is_ObjInst_WeakRef;
177 atomic(uintptr) _ref;
179} SSDSingleIter_WeakRef;
180#define SSDSingleIter_WeakRef(inst) ((SSDSingleIter_WeakRef*)(unused_noeval((inst) && &((inst)->_is_SSDSingleIter_WeakRef)), (inst)))
184#define ssdsingleiterCreate(node, lstate) SSDSingleIter_create(SSDSingleNode(node), lstate)
187#define ssdsingleiterObjInst(self) SSDIterator_objInst(SSDIterator(self))
190#define ssdsingleiterIsHashtable(self) (self)->_->isHashtable(SSDSingleIter(self))
192#define ssdsingleiterIsArray(self) (self)->_->isArray(SSDSingleIter(self))
194#define ssdsingleiterValid(self) (self)->_->valid(SSDSingleIter(self))
196#define ssdsingleiterNext(self) (self)->_->next(SSDSingleIter(self))
198#define ssdsingleiterGet(self, out) (self)->_->get(SSDSingleIter(self), out)
200#define ssdsingleiterPtr(self) (self)->_->ptr(SSDSingleIter(self))
202#define ssdsingleiterName(self) (self)->_->name(SSDSingleIter(self))
204#define ssdsingleiterIdx(self) (self)->_->idx(SSDSingleIter(self))
206#define ssdsingleiterIterOut(self, idx, name, val) (self)->_->iterOut(SSDSingleIter(self), idx, name, val)
#define saDeclarePtr(name)
#define _objfactory_guaranteed
#define stvar(typen, val)
CX Object System - Object-oriented programming in C.