133#define stvarInit(typen, val) { .data = { .st_##typen = val }, ._type = stType(typen) }
162#define stvar(typen, val) ((stvar) { .data = stArg(typen, val), ._type = stType(typen) })
178#define stvNone ((stvar) { ._type = stType(none) })
204#define stvark(key, typen, val) \
205 ((stvar) { .data = stArg(typen, val), ._type = stType(typen), ._key = #key })
230#define stvarkn(name, typen, val) \
231 ((stvar) { .data = stArg(typen, val), ._type = stType(typen), ._key = (name) })
233_meta_inline
stvar _stvar(
stype st, stgeneric val)
241#define stvar(typen, val) _stvar(stType(typen), stArg(typen, val))
243_meta_inline
stvar _stvark(
const char* nm,
stype st, stgeneric val)
245 stvar ret = _stvar(st, val);
249#define stvark(key, typen, val) _stvark(#key, stType(typen), stArg(typen, val))
250#define stvarkn(name, typen, val) _stvark((name), stType(typen), stArg(typen, val))
252#define stvNone _stvar(stType(none), _cxStGenZero())
316#define stvp(typen, pval) ((stvp) { stCheckedPtrArg(typen, pval), NULL })
336#define stvpk(key, typen, pval) ((stvp) { stCheckedPtrArg(typen, pval), #key })
350#define stvpNone ((stvp) { NULL, NULL, NULL })
352_meta_inline
stvp _stvp(
const char* nm,
stype st, stgeneric* p)
360#define stvp(typen, pval) _stvp(NULL, stCheckedPtrArg(typen, pval))
361#define stvpk(key, typen, pval) _stvp(#key, stCheckedPtrArg(typen, pval))
362#define stvpNone _stvp(NULL, NULL, NULL)
380void _stvarInit(
stvar* stv,
stype type, stgeneric val);
383void _stvarInitK(
stvar* stv,
stype type, stgeneric val,
const char* vk);
387void _stvarClear(
stvar* stv, flags_t flags);
391void _stvarSet(
stvar* stv,
stype type, stgeneric val);
394void _stvarSetK(
stvar* stv,
stype type, stgeneric val,
const char* vk);
400_Ret_notnull_
void* _stvarPrepare(
stvar* stv,
stype type);
422#define stvarSet(stv, type, val) _stvarSet(stv, stCheckedArg(type, val))
444#define stvarSetK(stv, key, type, val) _stvarSetK(stv, stCheckedArg(type, val), #key)
494 _stvarInitK(dvar,
stvarType(&svar), svar.data, svar._key);
523#define stvarIs(svar, type) _stvarIs(svar, stType(type))
524_meta_inline
bool _stvarIs(
stvar* svar,
stype styp)
551 return svar->data.st_string;
577 return &svar->data.st_string;
602 return svar->data.st_object;
618 return &svar->data.st_object;
642#define stvarObj(class, svar) (objDynCast(class, stvarObjInst(svar)))
737#define stvlInitSA(list, vararray) _stvlInitSA(list, (vararray).a)
772#define stvlNext(list, type, pvar) _stvlNext(list, stCheckedPtrArg(type, pvar))
773bool _stvlNext(
stvlist* list,
stype type, stgeneric* out);
793#define stvlNextPtr(list) _stvlNextPtr(list, stType(ptr))
815#define stvlNextObj(list, class) objDynCast(class, (ObjInst*)_stvlNextPtr(list, stType(object)))
840stgeneric _stvlAt(_In_
stvlist* list,
int idx,
stype type);
865#define stvlAt(list, idx, type) (_stvlAt((list), (idx), stType(type)).st_##type)
874#define stvlAtPtr(list, idx) (_stvlAt((list), (idx), stType(ptr)).st_ptr)
885#define stvlAtObj(list, idx, class) \
886 objDynCast(class, (ObjInst*)_stvlAt((list), (idx), stType(object)).st_object)
958#define stvlFind(list, key, type, pvar) _stvlFind(list, #key, stCheckedPtrArg(type, pvar))
959bool _stvlFind(_In_
stvlist* list,
const char* key,
stype type, stgeneric* out);
976#define stvlFindPtr(list, key) _stvlFindPtr(list, #key, stType(ptr))
977void* _stvlFindPtr(_In_
stvlist* list,
const char* key,
stype type);
995#define stvlFindObj(list, key, class) \
996 objDynCast(class, (ObjInst*)_stvlFindPtr(list, #key, stType(object)))
998stgeneric _stvlFindVal(_In_
stvlist* list,
const char* key,
stype type);
1017#define stvlFindVal(list, key, type) (_stvlFindVal(list, #key, stType(type)).st_##type)
1031#define stvlHasKey(list, key) _stvlHasKey(list, #key)
1032bool _stvlHasKey(_In_
stvlist* list,
const char* key);
#define stvarIs(svar, type)
ObjInst * stvarObjInst(stvar *svar)
string stvarString(stvar *svar)
string * stvarStringPtr(stvar *svar)
ObjInst ** stvarObjInstPtr(stvar *svar)
#define stvar(typen, val)
void stvarDestroy(stvar *stv)
void stvarCopy(stvar *dvar, stvar svar)
void stvlRewind(stvlist *list)
void stvlInit(stvlist *list, int count, stvar *vars)
#define stvp(typen, pval)
bool stEq(stype s1, stype s2)
stype stvarType(const stvar *v)
int cursor
Current position (next variant to examine)
stvar * vars
Pointer to variant array.
int count
Total number of variants in array.
stype type
Type of the destination.
const char * key
Binding key, or NULL if this destination is positional.
stgeneric * ptr
Destination in the caller's own storage.
Runtime type system and type descriptor infrastructure.