7#include <cx/ssdtree/node/ssdnode.h>
18_Ret_valid_ SSDNode* _ssdCreateRoot(
int crtype, _In_opt_ SSDTree* tree, uint32 flags);
36#define ssdCreateHashtable(...) _ssdCreateRoot(SSD_Create_Hashtable, NULL, opt_flags(__VA_ARGS__))
53#define ssdCreateArray(...) _ssdCreateRoot(SSD_Create_Array, NULL, opt_flags(__VA_ARGS__))
71#define ssdCreateSingle(...) _ssdCreateRoot(SSD_Create_Single, NULL, opt_flags(__VA_ARGS__))
82#define ssdCreateCustom(crtype, tree) _ssdCreateRoot(crtype, tree, 0)
92_Ret_opt_valid_ SSDNode* _ssdClone(_In_ SSDNode* root, _In_opt_ SSDTree* desttree,
93 _Inout_opt_ SSDLockState* lstate);
106#define ssdClone(root, desttree) _ssdClone(root, desttree, (SSDLockState*)_ssdCurrentLockState)
108_Ret_opt_valid_ SSDNode* _ssdSubtree(_In_ SSDNode* root, _In_opt_ strref path,
SSDCreateType create,
109 _Inout_opt_ SSDLockState* lstate);
130#define ssdSubtree(root, path, create) \
131 _ssdSubtree(root, path, create, (SSDLockState*)_ssdCurrentLockState)
133_Ret_opt_valid_ SSDNode* _ssdSubtreeB(_In_ SSDNode* root, _In_opt_ strref path,
134 _Inout_opt_ SSDLockState* lstate);
147#define ssdSubtreeB(root, path) \
148 _ssdSubtreeB(root, path, (SSDLockState*)&_ssdCurrentLockState->_is_SSDLockState)
204_Success_(
return)
bool _ssdGet(_In_ SSDNode* root, _In_opt_ strref path, _Out_
stvar* out,
205 _Inout_opt_ SSDLockState* lstate);
219#define ssdGet(root, path, out) _ssdGet(root, path, out, (SSDLockState*)_ssdCurrentLockState)
221_Success_(
return) _meta_inline
bool _ssdGetD(_In_ SSDNode* root, _In_opt_ strref path, _Out_
stvar* out,
222 stvar def, _Inout_opt_ SSDLockState* lstate)
224 if (_ssdGet(root, path, out, lstate))
242#define ssdGetD(root, path, out, def) \
243 _ssdGetD(root, path, out, def, (SSDLockState*)_ssdCurrentLockState)
245_Success_(
return)
bool _ssdCopyOut(_In_ SSDNode* root, _In_opt_ strref path,
stype valtype,
246 _stCopyDest_Anno_(valtype) stgeneric* val,
247 _Inout_opt_ SSDLockState* lstate);
269#define ssdCopyOut(root, path, vtype, val_copy_out) \
272 stCheckedPtrArg(vtype, val_copy_out), \
273 (SSDLockState*)_ssdCurrentLockState)
275_Success_(
return)
bool _ssdCopyOutD(_In_ SSDNode* root, _In_opt_ strref path,
stype valtype,
276 _stCopyDest_Anno_(valtype) stgeneric* val, stgeneric def,
277 _Inout_opt_ SSDLockState* lstate);
289#define ssdCopyOutD(root, path, vtype, val_copy_out, def) \
292 stCheckedPtrArg(vtype, val_copy_out), \
294 (SSDLockState*)_ssdCurrentLockState)
297#define ssdval_spec(type) \
298 _meta_inline stTypeDef(type) \
299 _ssdVal_##type(_In_ SSDNode* root, \
300 _In_opt_ strref path, \
301 stTypeDef(type) def, \
302 _Inout_opt_ SSDLockState* lstate) \
304 stTypeDef(type) out; \
305 _ssdCopyOutD(root, path, stCheckedPtrArg(type, &out), stArg(type, def), lstate); \
345#define ssdVal(type, root, path, def) \
346 _ssdVal_##type(root, path, def, (SSDLockState*)_ssdCurrentLockState)
348 _meta_inline
bool _ssdStringOut(_In_ SSDNode* root, _In_opt_ strref path,
349 _Inout_
string* out, _Inout_opt_ SSDLockState* lstate)
365#define ssdStringOut(root, path, out) \
366 _ssdStringOut(root, path, out, (SSDLockState*)_ssdCurrentLockState)
368_meta_inline
bool _ssdStringOutD(_In_ SSDNode* root, _In_opt_ strref path, _Inout_
string* out,
369 _In_opt_ strref def, _Inout_opt_ SSDLockState* lstate)
386#define ssdStringOutD(root, path, out, def) \
387 _ssdStringOutD(root, path, out, def, (SSDLockState*)_ssdCurrentLockState)
397bool _ssdSet(_Inout_ SSDNode* root, _In_opt_ strref path,
bool createpath,
stvar val,
398 _Inout_opt_ SSDLockState* lstate);
417#define ssdSet(root, path, createpath, val) \
418 _ssdSet(root, path, createpath, val, (SSDLockState*)_ssdCurrentLockState)
420bool _ssdSetC(_Inout_ SSDNode* root, _In_opt_ strref path,
bool createpath,
421 _Pre_notnull_ _Post_invalid_
stvar* val, _Inout_opt_ SSDLockState* lstate);
435#define ssdSetC(root, path, createpath, val) \
436 _ssdSetC(root, path, createpath, val, (SSDLockState*)_ssdCurrentLockState)
438bool _ssdRemove(_Inout_ SSDNode* root, _In_opt_ strref path, _Inout_opt_ SSDLockState* lstate);
447#define ssdRemove(root, path) _ssdRemove(root, path, (SSDLockState*)_ssdCurrentLockState)
458stvar* _ssdPtr(_In_ SSDNode* root, _In_opt_ strref path, _Inout_ SSDLockState* lstate);
481#define ssdPtr(root, path) \
482 _ssdPtr(root, path, (SSDLockState*)&_ssdCurrentLockState->_is_SSDLockState)
484_Ret_opt_valid_ _meta_inline strref
485_ssdStrRef(_In_ SSDNode* root, _In_opt_ strref path, _Inout_ SSDLockState* lstate)
487 stvar* temp = _ssdPtr(root, path, lstate);
488 return stvarIs(temp,
string) ? temp->data.st_string : NULL;
501#define ssdStrRef(root, path) \
502 _ssdStrRef(root, path, (SSDLockState*)&_ssdCurrentLockState->_is_SSDLockState)
504_Must_inspect_result_ _Ret_opt_valid_ _meta_inline
ObjInst*
505_ssdObjInstPtr(_In_ SSDNode* root, _In_opt_ strref path, _Inout_ SSDLockState* lstate)
507 stvar* temp = _ssdPtr(root, path, lstate);
508 return stvarIs(temp,
object) ? temp->data.st_object : NULL;
521#define ssdObjInstPtr(root, path) \
522 _ssdObjInstPtr(root, path, (SSDLockState*)&_ssdCurrentLockState->_is_SSDLockState)
535#define ssdObjPtr(root, path, clsname) objDynCast(clsname, ssdObjInstPtr(root, path))
545bool _ssdExportArray(_In_ SSDNode* root, _In_opt_ strref path, _Inout_ sa_stvar* out,
546 _Inout_opt_ SSDLockState* lstate);
559#define ssdExportArray(root, path, out) \
560 _ssdExportArray(root, path, out, (SSDLockState*)_ssdCurrentLockState)
562bool _ssdImportArray(_Inout_ SSDNode* root, _In_opt_ strref path, _In_ sa_stvar arr,
563 _Inout_opt_ SSDLockState* lstate);
575#define ssdImportArray(root, path, arr) \
576 _ssdImportArray(root, path, arr, (SSDLockState*)_ssdCurrentLockState)
578bool _ssdExportTypedArray(_In_ SSDNode* root, _In_opt_ strref path,
stype elemtype,
579 _Inout_ sahandle out,
bool strict, _Inout_opt_ SSDLockState* lstate);
580bool _ssdImportTypedArray(_Inout_ SSDNode* root, _In_opt_ strref path,
stype elemtype,
581 _In_ sa_ref arr, _Inout_opt_ SSDLockState* lstate);
606#define ssdExportTypedArray(root, path, type, out, strict) \
607 _ssdExportTypedArray(root, \
612 (SSDLockState*)_ssdCurrentLockState)
623#define ssdImportTypedArray(root, path, type, arr) \
624 _ssdImportTypedArray(root, path, stType(type), SAREF(arr), (SSDLockState*)_ssdCurrentLockState)
626int32 _ssdCount(_In_ SSDNode* root, _In_opt_ strref path,
bool arrayonly,
627 _Inout_opt_ SSDLockState* lstate);
637#define ssdCount(root, path, arrayonly) \
638 _ssdCount(root, path, arrayonly, (SSDLockState*)_ssdCurrentLockState)
640_Ret_opt_valid_
stvar* _ssdIndex(_In_ SSDNode* root, _In_opt_ strref path, int32 idx,
641 _Inout_ SSDLockState* lstate);
654#define ssdIndex(root, path, idx) \
655 _ssdIndex(root, path, idx, (SSDLockState*)&_ssdCurrentLockState->_is_SSDLockState)
657bool _ssdAppend(_Inout_ SSDNode* root, _In_opt_ strref path,
bool createpath,
stvar val,
658 _Inout_opt_ SSDLockState* lstate);
677#define ssdAppend(root, path, createpath, val) \
678 _ssdAppend(root, path, createpath, val, (SSDLockState*)_ssdCurrentLockState)
688bool _ssdGraft(_Inout_ SSDNode* dest, _In_opt_ strref destpath,
689 _Inout_opt_ SSDLockState* dest_lstate, _In_ SSDNode* src, _In_opt_ strref srcpath,
690 _Inout_opt_ SSDLockState* src_lstate);
715#define ssdGraft(dest, destpath, src, srcpath) \
716 _ssdGraft(dest, destpath, (SSDLockState*)_ssdCurrentLockState, src, srcpath, NULL)
enum SSD_CREATE_TYPE_ENUM SSDCreateType
Node creation types for specifying which kind of node to create.
void strDestroy(strhandle ps)
#define stvarIs(svar, type)
#define stvar(typen, val)
void stvarCopy(stvar *dvar, stvar svar)
#define stCheckedPtrArg(type, val)
Dynamic arrays with type-safe generic programming.
Core string types and fundamental operations.