CX Framework
Cross-platform C utility framework
Loading...
Searching...
No Matches
ssdsinglenode.h
1#pragma once
2// This header file is auto-generated!
3// Do not make changes to this file or they will be overwritten.
4// clang-format off
5#include <cx/obj.h>
6#include <cx/ssdtree/node/ssdnode.h>
7
8typedef struct SSDSingleNode SSDSingleNode;
9typedef struct SSDSingleNode_WeakRef SSDSingleNode_WeakRef;
10typedef struct SSDSingleIter SSDSingleIter;
11typedef struct SSDSingleIter_WeakRef SSDSingleIter_WeakRef;
12saDeclarePtr(SSDSingleNode);
13saDeclarePtr(SSDSingleNode_WeakRef);
14saDeclarePtr(SSDSingleIter);
15saDeclarePtr(SSDSingleIter_WeakRef);
16
17typedef struct SSDSingleNode_ClassIf {
18 ObjIface* _implements;
19 ObjIface* _parent;
20 size_t _size;
21
22 // This node is an object that contains values or objects by name
23 bool (*isHashtable)(_In_ void* self);
24 // This node is an array that contains values or objects by array index
25 bool (*isArray)(_In_ void* self);
26 // Gets a value. Caller owns the value and must destroy it with stDestroy!
27 bool (*get)(_In_ void* self, int32 idx, _In_opt_ strref name, _When_(return == true, _Out_) stvar* out, _Inout_ SSDLockState* _ssdCurrentLockState);
28 // Gets a pointer to a value. This points to the internal storage within the node
29 // so it is only guaranteed to be valid while the read lock is held.
30 _Ret_opt_valid_ stvar* (*ptr)(_In_ void* self, int32 idx, _In_opt_ strref name, _Inout_ SSDLockState* _ssdCurrentLockState);
31 // Sets the given value
32 bool (*set)(_In_ void* self, int32 idx, _In_opt_ strref name, stvar val, _Inout_ SSDLockState* _ssdCurrentLockState);
33 // Same as setValue but consumes the value
34 // (consumes even on failure)
35 bool (*setC)(_In_ void* self, int32 idx, _In_opt_ strref name, _Inout_ stvar* val, _Inout_ SSDLockState* _ssdCurrentLockState);
36 // Removes a value
37 bool (*remove)(_In_ void* self, int32 idx, _In_opt_ strref name, _Inout_ SSDLockState* _ssdCurrentLockState);
38 // How many values / objects does this node contain?
39 int32 (*count)(_In_ void* self, _Inout_ SSDLockState* _ssdCurrentLockState);
40 // IMPORTANT NOTE: The generic object iterator interface cannot take any parameters;
41 // thus it always acquires a transient read lock and holds it until the iterator is
42 // destroyed. The caller MUST NOT already have an SSDLock held.
43 // If you want to use iterators inside a larger locked transaction or modify the tree,
44 // use iterLocked() instead.
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;
49
50typedef struct SSDSingleIter_ClassIf {
51 ObjIface* _implements;
52 ObjIface* _parent;
53 size_t _size;
54
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;
66
67typedef struct SSDSingleNode {
68 union {
69 SSDSingleNode_ClassIf* _;
70 void* _is_SSDSingleNode;
71 void* _is_SSDNode;
72 void* _is_ObjInst;
73 };
74 ObjClassInfo* _clsinfo;
75 atomic(uintptr) _ref;
76 atomic(ptr) _weakref;
77
78 SSDTree* tree;
79 int64 modified; // The timestamp this node was last modified
80 stvar storage;
81} SSDSingleNode;
82extern ObjClassInfo SSDSingleNode_clsinfo;
83#define SSDSingleNode(inst) ((SSDSingleNode*)(unused_noeval((inst) && &((inst)->_is_SSDSingleNode)), (inst)))
84#define SSDSingleNodeNone ((SSDSingleNode*)NULL)
85
86typedef struct SSDSingleNode_WeakRef {
87 union {
88 ObjInst* _inst;
89 void* _is_SSDSingleNode_WeakRef;
90 void* _is_SSDNode_WeakRef;
91 void* _is_ObjInst_WeakRef;
92 };
93 atomic(uintptr) _ref;
94 RWLock _lock;
95} SSDSingleNode_WeakRef;
96#define SSDSingleNode_WeakRef(inst) ((SSDSingleNode_WeakRef*)(unused_noeval((inst) && &((inst)->_is_SSDSingleNode_WeakRef)), (inst)))
97
98_objfactory_guaranteed SSDSingleNode* SSDSingleNode__create(SSDTree* tree);
99// SSDSingleNode* ssdsinglenode_create(SSDTree* tree);
100#define ssdsinglenode_create(tree) SSDSingleNode__create(SSDTree(tree))
101
102// void ssdsinglenodeUpdateModified(SSDSingleNode* self);
103#define ssdsinglenodeUpdateModified(self) SSDNode_updateModified(SSDNode(self))
104
105// bool ssdsinglenodeIsHashtable(SSDSingleNode* self);
106//
107// This node is an object that contains values or objects by name
108#define ssdsinglenodeIsHashtable(self) (self)->_->isHashtable(SSDSingleNode(self))
109// bool ssdsinglenodeIsArray(SSDSingleNode* self);
110//
111// This node is an array that contains values or objects by array index
112#define ssdsinglenodeIsArray(self) (self)->_->isArray(SSDSingleNode(self))
113// bool ssdsinglenodeGet(SSDSingleNode* self, int32 idx, strref name, stvar* out, SSDLockState* _ssdCurrentLockState);
114//
115// Gets a value. Caller owns the value and must destroy it with stDestroy!
116#define ssdsinglenodeGet(self, idx, name, out, _ssdCurrentLockState) (self)->_->get(SSDSingleNode(self), idx, name, out, _ssdCurrentLockState)
117// stvar* ssdsinglenodePtr(SSDSingleNode* self, int32 idx, strref name, SSDLockState* _ssdCurrentLockState);
118//
119// Gets a pointer to a value. This points to the internal storage within the node
120// so it is only guaranteed to be valid while the read lock is held.
121#define ssdsinglenodePtr(self, idx, name, _ssdCurrentLockState) (self)->_->ptr(SSDSingleNode(self), idx, name, _ssdCurrentLockState)
122// bool ssdsinglenodeSet(SSDSingleNode* self, int32 idx, strref name, stvar val, SSDLockState* _ssdCurrentLockState);
123//
124// Sets the given value
125#define ssdsinglenodeSet(self, idx, name, val, _ssdCurrentLockState) (self)->_->set(SSDSingleNode(self), idx, name, val, _ssdCurrentLockState)
126// bool ssdsinglenodeSetC(SSDSingleNode* self, int32 idx, strref name, stvar* val, SSDLockState* _ssdCurrentLockState);
127//
128// Same as setValue but consumes the value
129// (consumes even on failure)
130#define ssdsinglenodeSetC(self, idx, name, val, _ssdCurrentLockState) (self)->_->setC(SSDSingleNode(self), idx, name, val, _ssdCurrentLockState)
131// bool ssdsinglenodeRemove(SSDSingleNode* self, int32 idx, strref name, SSDLockState* _ssdCurrentLockState);
132//
133// Removes a value
134#define ssdsinglenodeRemove(self, idx, name, _ssdCurrentLockState) (self)->_->remove(SSDSingleNode(self), idx, name, _ssdCurrentLockState)
135// int32 ssdsinglenodeCount(SSDSingleNode* self, SSDLockState* _ssdCurrentLockState);
136//
137// How many values / objects does this node contain?
138#define ssdsinglenodeCount(self, _ssdCurrentLockState) (self)->_->count(SSDSingleNode(self), _ssdCurrentLockState)
139// SSDIterator* ssdsinglenodeIter(SSDSingleNode* self);
140//
141// IMPORTANT NOTE: The generic object iterator interface cannot take any parameters;
142// thus it always acquires a transient read lock and holds it until the iterator is
143// destroyed. The caller MUST NOT already have an SSDLock held.
144// If you want to use iterators inside a larger locked transaction or modify the tree,
145// use iterLocked() instead.
146#define ssdsinglenodeIter(self) (self)->_->iter(SSDSingleNode(self))
147// SSDIterator* ssdsinglenode_iterLocked(SSDSingleNode* self, SSDLockState* _ssdCurrentLockState);
148#define ssdsinglenode_iterLocked(self, _ssdCurrentLockState) (self)->_->_iterLocked(SSDSingleNode(self), _ssdCurrentLockState)
149
150typedef struct SSDSingleIter {
151 union {
152 SSDSingleIter_ClassIf* _;
153 void* _is_SSDSingleIter;
154 void* _is_SSDIterator;
155 void* _is_ObjInst;
156 };
157 ObjClassInfo* _clsinfo;
158 atomic(uintptr) _ref;
159 atomic(ptr) _weakref;
160
161 SSDNode* node;
162 SSDLockState* lstate;
163 SSDLockState transient_lock_state;
164 bool done;
165} SSDSingleIter;
166extern ObjClassInfo SSDSingleIter_clsinfo;
167#define SSDSingleIter(inst) ((SSDSingleIter*)(unused_noeval((inst) && &((inst)->_is_SSDSingleIter)), (inst)))
168#define SSDSingleIterNone ((SSDSingleIter*)NULL)
169
170typedef struct SSDSingleIter_WeakRef {
171 union {
172 ObjInst* _inst;
173 void* _is_SSDSingleIter_WeakRef;
174 void* _is_SSDIterator_WeakRef;
175 void* _is_ObjInst_WeakRef;
176 };
177 atomic(uintptr) _ref;
178 RWLock _lock;
179} SSDSingleIter_WeakRef;
180#define SSDSingleIter_WeakRef(inst) ((SSDSingleIter_WeakRef*)(unused_noeval((inst) && &((inst)->_is_SSDSingleIter_WeakRef)), (inst)))
181
182_objfactory_guaranteed SSDSingleIter* SSDSingleIter_create(SSDSingleNode* node, SSDLockState* lstate);
183// SSDSingleIter* ssdsingleiterCreate(SSDSingleNode* node, SSDLockState* lstate);
184#define ssdsingleiterCreate(node, lstate) SSDSingleIter_create(SSDSingleNode(node), lstate)
185
186// ObjInst* ssdsingleiterObjInst(SSDSingleIter* self);
187#define ssdsingleiterObjInst(self) SSDIterator_objInst(SSDIterator(self))
188
189// bool ssdsingleiterIsHashtable(SSDSingleIter* self);
190#define ssdsingleiterIsHashtable(self) (self)->_->isHashtable(SSDSingleIter(self))
191// bool ssdsingleiterIsArray(SSDSingleIter* self);
192#define ssdsingleiterIsArray(self) (self)->_->isArray(SSDSingleIter(self))
193// bool ssdsingleiterValid(SSDSingleIter* self);
194#define ssdsingleiterValid(self) (self)->_->valid(SSDSingleIter(self))
195// bool ssdsingleiterNext(SSDSingleIter* self);
196#define ssdsingleiterNext(self) (self)->_->next(SSDSingleIter(self))
197// bool ssdsingleiterGet(SSDSingleIter* self, stvar* out);
198#define ssdsingleiterGet(self, out) (self)->_->get(SSDSingleIter(self), out)
199// stvar* ssdsingleiterPtr(SSDSingleIter* self);
200#define ssdsingleiterPtr(self) (self)->_->ptr(SSDSingleIter(self))
201// strref ssdsingleiterName(SSDSingleIter* self);
202#define ssdsingleiterName(self) (self)->_->name(SSDSingleIter(self))
203// int32 ssdsingleiterIdx(SSDSingleIter* self);
204#define ssdsingleiterIdx(self) (self)->_->idx(SSDSingleIter(self))
205// bool ssdsingleiterIterOut(SSDSingleIter* self, int32* idx, strref* name, stvar** val);
206#define ssdsingleiterIterOut(self, idx, name, val) (self)->_->iterOut(SSDSingleIter(self), idx, name, val)
207
#define saDeclarePtr(name)
Definition sarray.h:98
#define _objfactory_guaranteed
Definition objimpl.h:104
#define stvar(typen, val)
Definition stvar.h:153
CX Object System - Object-oriented programming in C.