CX Framework
Cross-platform C utility framework
Loading...
Searching...
No Matches
ssdhashnode.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 SSDHashNode SSDHashNode;
9typedef struct SSDHashNode_WeakRef SSDHashNode_WeakRef;
10typedef struct SSDHashIter SSDHashIter;
11typedef struct SSDHashIter_WeakRef SSDHashIter_WeakRef;
12saDeclarePtr(SSDHashNode);
13saDeclarePtr(SSDHashNode_WeakRef);
14saDeclarePtr(SSDHashIter);
15saDeclarePtr(SSDHashIter_WeakRef);
16
17typedef struct SSDHashNode_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} SSDHashNode_ClassIf;
48extern SSDHashNode_ClassIf SSDHashNode_ClassIf_tmpl;
49
50typedef struct SSDHashIter_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} SSDHashIter_ClassIf;
65extern SSDHashIter_ClassIf SSDHashIter_ClassIf_tmpl;
66
67typedef struct SSDHashNode {
68 union {
69 SSDHashNode_ClassIf* _;
70 void* _is_SSDHashNode;
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 hashtable storage;
81} SSDHashNode;
82extern ObjClassInfo SSDHashNode_clsinfo;
83#define SSDHashNode(inst) ((SSDHashNode*)(unused_noeval((inst) && &((inst)->_is_SSDHashNode)), (inst)))
84#define SSDHashNodeNone ((SSDHashNode*)NULL)
85
86typedef struct SSDHashNode_WeakRef {
87 union {
88 ObjInst* _inst;
89 void* _is_SSDHashNode_WeakRef;
90 void* _is_SSDNode_WeakRef;
91 void* _is_ObjInst_WeakRef;
92 };
93 atomic(uintptr) _ref;
94 RWLock _lock;
95} SSDHashNode_WeakRef;
96#define SSDHashNode_WeakRef(inst) ((SSDHashNode_WeakRef*)(unused_noeval((inst) && &((inst)->_is_SSDHashNode_WeakRef)), (inst)))
97
98_objfactory_guaranteed SSDHashNode* SSDHashNode__create(SSDTree* tree);
99// SSDHashNode* ssdhashnode_create(SSDTree* tree);
100#define ssdhashnode_create(tree) SSDHashNode__create(SSDTree(tree))
101
102// void ssdhashnodeUpdateModified(SSDHashNode* self);
103#define ssdhashnodeUpdateModified(self) SSDNode_updateModified(SSDNode(self))
104
105// bool ssdhashnodeIsHashtable(SSDHashNode* self);
106//
107// This node is an object that contains values or objects by name
108#define ssdhashnodeIsHashtable(self) (self)->_->isHashtable(SSDHashNode(self))
109// bool ssdhashnodeIsArray(SSDHashNode* self);
110//
111// This node is an array that contains values or objects by array index
112#define ssdhashnodeIsArray(self) (self)->_->isArray(SSDHashNode(self))
113// bool ssdhashnodeGet(SSDHashNode* 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 ssdhashnodeGet(self, idx, name, out, _ssdCurrentLockState) (self)->_->get(SSDHashNode(self), idx, name, out, _ssdCurrentLockState)
117// stvar* ssdhashnodePtr(SSDHashNode* 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 ssdhashnodePtr(self, idx, name, _ssdCurrentLockState) (self)->_->ptr(SSDHashNode(self), idx, name, _ssdCurrentLockState)
122// bool ssdhashnodeSet(SSDHashNode* self, int32 idx, strref name, stvar val, SSDLockState* _ssdCurrentLockState);
123//
124// Sets the given value
125#define ssdhashnodeSet(self, idx, name, val, _ssdCurrentLockState) (self)->_->set(SSDHashNode(self), idx, name, val, _ssdCurrentLockState)
126// bool ssdhashnodeSetC(SSDHashNode* 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 ssdhashnodeSetC(self, idx, name, val, _ssdCurrentLockState) (self)->_->setC(SSDHashNode(self), idx, name, val, _ssdCurrentLockState)
131// bool ssdhashnodeRemove(SSDHashNode* self, int32 idx, strref name, SSDLockState* _ssdCurrentLockState);
132//
133// Removes a value
134#define ssdhashnodeRemove(self, idx, name, _ssdCurrentLockState) (self)->_->remove(SSDHashNode(self), idx, name, _ssdCurrentLockState)
135// int32 ssdhashnodeCount(SSDHashNode* self, SSDLockState* _ssdCurrentLockState);
136//
137// How many values / objects does this node contain?
138#define ssdhashnodeCount(self, _ssdCurrentLockState) (self)->_->count(SSDHashNode(self), _ssdCurrentLockState)
139// SSDIterator* ssdhashnodeIter(SSDHashNode* 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 ssdhashnodeIter(self) (self)->_->iter(SSDHashNode(self))
147// SSDIterator* ssdhashnode_iterLocked(SSDHashNode* self, SSDLockState* _ssdCurrentLockState);
148#define ssdhashnode_iterLocked(self, _ssdCurrentLockState) (self)->_->_iterLocked(SSDHashNode(self), _ssdCurrentLockState)
149
150typedef struct SSDHashIter {
151 union {
152 SSDHashIter_ClassIf* _;
153 void* _is_SSDHashIter;
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 htiter iter;
165 string lastName;
166} SSDHashIter;
167extern ObjClassInfo SSDHashIter_clsinfo;
168#define SSDHashIter(inst) ((SSDHashIter*)(unused_noeval((inst) && &((inst)->_is_SSDHashIter)), (inst)))
169#define SSDHashIterNone ((SSDHashIter*)NULL)
170
171typedef struct SSDHashIter_WeakRef {
172 union {
173 ObjInst* _inst;
174 void* _is_SSDHashIter_WeakRef;
175 void* _is_SSDIterator_WeakRef;
176 void* _is_ObjInst_WeakRef;
177 };
178 atomic(uintptr) _ref;
179 RWLock _lock;
180} SSDHashIter_WeakRef;
181#define SSDHashIter_WeakRef(inst) ((SSDHashIter_WeakRef*)(unused_noeval((inst) && &((inst)->_is_SSDHashIter_WeakRef)), (inst)))
182
183_objfactory_guaranteed SSDHashIter* SSDHashIter_create(SSDHashNode* node, SSDLockState* lstate);
184// SSDHashIter* ssdhashiterCreate(SSDHashNode* node, SSDLockState* lstate);
185#define ssdhashiterCreate(node, lstate) SSDHashIter_create(SSDHashNode(node), lstate)
186
187// ObjInst* ssdhashiterObjInst(SSDHashIter* self);
188#define ssdhashiterObjInst(self) SSDIterator_objInst(SSDIterator(self))
189
190// bool ssdhashiterIsHashtable(SSDHashIter* self);
191#define ssdhashiterIsHashtable(self) (self)->_->isHashtable(SSDHashIter(self))
192// bool ssdhashiterIsArray(SSDHashIter* self);
193#define ssdhashiterIsArray(self) (self)->_->isArray(SSDHashIter(self))
194// bool ssdhashiterValid(SSDHashIter* self);
195#define ssdhashiterValid(self) (self)->_->valid(SSDHashIter(self))
196// bool ssdhashiterNext(SSDHashIter* self);
197#define ssdhashiterNext(self) (self)->_->next(SSDHashIter(self))
198// bool ssdhashiterGet(SSDHashIter* self, stvar* out);
199#define ssdhashiterGet(self, out) (self)->_->get(SSDHashIter(self), out)
200// stvar* ssdhashiterPtr(SSDHashIter* self);
201#define ssdhashiterPtr(self) (self)->_->ptr(SSDHashIter(self))
202// strref ssdhashiterName(SSDHashIter* self);
203#define ssdhashiterName(self) (self)->_->name(SSDHashIter(self))
204// int32 ssdhashiterIdx(SSDHashIter* self);
205#define ssdhashiterIdx(self) (self)->_->idx(SSDHashIter(self))
206// bool ssdhashiterIterOut(SSDHashIter* self, int32* idx, strref* name, stvar** val);
207#define ssdhashiterIterOut(self, idx, name, val) (self)->_->iterOut(SSDHashIter(self), idx, name, val)
208
#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.