6#include <cx/ssdtree/node/ssdnode.h>
8typedef struct SSDArrayNode SSDArrayNode;
9typedef struct SSDArrayNode_WeakRef SSDArrayNode_WeakRef;
10typedef struct SSDArrayIter SSDArrayIter;
11typedef struct SSDArrayIter_WeakRef SSDArrayIter_WeakRef;
17typedef struct SSDArrayNode_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 bool (*append)(_In_
void* self,
stvar val, SSDLockState* _ssdCurrentLockState);
48} SSDArrayNode_ClassIf;
49extern SSDArrayNode_ClassIf SSDArrayNode_ClassIf_tmpl;
51typedef struct SSDArrayIter_ClassIf {
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;
68typedef struct SSDArrayNode {
70 SSDArrayNode_ClassIf* _;
71 void* _is_SSDArrayNode;
84#define SSDArrayNode(inst) ((SSDArrayNode*)(unused_noeval((inst) && &((inst)->_is_SSDArrayNode)), (inst)))
85#define SSDArrayNodeNone ((SSDArrayNode*)NULL)
87typedef struct SSDArrayNode_WeakRef {
90 void* _is_SSDArrayNode_WeakRef;
91 void* _is_SSDNode_WeakRef;
92 void* _is_ObjInst_WeakRef;
96} SSDArrayNode_WeakRef;
97#define SSDArrayNode_WeakRef(inst) ((SSDArrayNode_WeakRef*)(unused_noeval((inst) && &((inst)->_is_SSDArrayNode_WeakRef)), (inst)))
101#define ssdarraynode_create(tree) SSDArrayNode__create(SSDTree(tree))
104#define ssdarraynodeUpdateModified(self) SSDNode_updateModified(SSDNode(self))
109#define ssdarraynodeIsHashtable(self) (self)->_->isHashtable(SSDArrayNode(self))
113#define ssdarraynodeIsArray(self) (self)->_->isArray(SSDArrayNode(self))
117#define ssdarraynodeGet(self, idx, name, out, _ssdCurrentLockState) (self)->_->get(SSDArrayNode(self), idx, name, out, _ssdCurrentLockState)
122#define ssdarraynodePtr(self, idx, name, _ssdCurrentLockState) (self)->_->ptr(SSDArrayNode(self), idx, name, _ssdCurrentLockState)
126#define ssdarraynodeSet(self, idx, name, val, _ssdCurrentLockState) (self)->_->set(SSDArrayNode(self), idx, name, val, _ssdCurrentLockState)
131#define ssdarraynodeSetC(self, idx, name, val, _ssdCurrentLockState) (self)->_->setC(SSDArrayNode(self), idx, name, val, _ssdCurrentLockState)
135#define ssdarraynodeRemove(self, idx, name, _ssdCurrentLockState) (self)->_->remove(SSDArrayNode(self), idx, name, _ssdCurrentLockState)
139#define ssdarraynodeCount(self, _ssdCurrentLockState) (self)->_->count(SSDArrayNode(self), _ssdCurrentLockState)
147#define ssdarraynodeIter(self) (self)->_->iter(SSDArrayNode(self))
149#define ssdarraynode_iterLocked(self, _ssdCurrentLockState) (self)->_->_iterLocked(SSDArrayNode(self), _ssdCurrentLockState)
151#define ssdarraynodeAppend(self, val, _ssdCurrentLockState) (self)->_->append(SSDArrayNode(self), val, _ssdCurrentLockState)
153typedef struct SSDArrayIter {
155 SSDArrayIter_ClassIf* _;
156 void* _is_SSDArrayIter;
157 void* _is_SSDIterator;
161 atomic(uintptr) _ref;
162 atomic(ptr) _weakref;
165 SSDLockState* lstate;
166 SSDLockState transient_lock_state;
171#define SSDArrayIter(inst) ((SSDArrayIter*)(unused_noeval((inst) && &((inst)->_is_SSDArrayIter)), (inst)))
172#define SSDArrayIterNone ((SSDArrayIter*)NULL)
174typedef struct SSDArrayIter_WeakRef {
177 void* _is_SSDArrayIter_WeakRef;
178 void* _is_SSDIterator_WeakRef;
179 void* _is_ObjInst_WeakRef;
181 atomic(uintptr) _ref;
183} SSDArrayIter_WeakRef;
184#define SSDArrayIter_WeakRef(inst) ((SSDArrayIter_WeakRef*)(unused_noeval((inst) && &((inst)->_is_SSDArrayIter_WeakRef)), (inst)))
188#define ssdarrayiterCreate(node, lstate) SSDArrayIter_create(SSDArrayNode(node), lstate)
191#define ssdarrayiterObjInst(self) SSDIterator_objInst(SSDIterator(self))
194#define ssdarrayiterIsHashtable(self) (self)->_->isHashtable(SSDArrayIter(self))
196#define ssdarrayiterIsArray(self) (self)->_->isArray(SSDArrayIter(self))
198#define ssdarrayiterValid(self) (self)->_->valid(SSDArrayIter(self))
200#define ssdarrayiterNext(self) (self)->_->next(SSDArrayIter(self))
202#define ssdarrayiterGet(self, out) (self)->_->get(SSDArrayIter(self), out)
204#define ssdarrayiterPtr(self) (self)->_->ptr(SSDArrayIter(self))
206#define ssdarrayiterName(self) (self)->_->name(SSDArrayIter(self))
208#define ssdarrayiterIdx(self) (self)->_->idx(SSDArrayIter(self))
210#define ssdarrayiterIterOut(self, idx, name, val) (self)->_->iterOut(SSDArrayIter(self), idx, name, val)
#define saDeclarePtr(name)
#define _objfactory_guaranteed
#define stvar(typen, val)
CX Object System - Object-oriented programming in C.