124#define stvarInit(typen, val) { .data = { .st_##typen = val }, .type = stType(typen) }
153#define stvar(typen, val) ((stvar) { .data = stArg(typen, val), .type = stType(typen) })
169#define stvNone ((stvar) { .type = stType(none) })
171_meta_inline
stvar _stvar(stype st, stgeneric val)
178#define stvar(typen, val) _stvar(stType(typen), stArg(typen, val))
180#define stvNone _stvar(0, stArg(int64, 0))
211 _stDestroy(stv->type, NULL, &stv->data, 0);
237 dvar->type = svar.type;
238 _stCopy(svar.type, NULL, &dvar->data, svar.data, 0);
267#define stvarIs(svar, type) _stvarIs(svar, stType(type))
268_meta_inline
bool _stvarIs(
stvar* svar, stype styp)
270 return svar &&
stEq(svar->type, styp);
295 return svar->data.st_string;
321 return &svar->data.st_string;
346 return svar->data.st_object;
362 return &svar->data.st_object;
386#define stvarObj(class, svar) (objDynCast(class, stvarObjInst(svar)))
481#define stvlInitSA(list, vararray) _stvlInitSA(list, (vararray).a)
516#define stvlNext(list, type, pvar) _stvlNext(list, stCheckedPtrArg(type, pvar))
517bool _stvlNext(
stvlist* list, stype type, stgeneric* out);
537#define stvlNextPtr(list) _stvlNextPtr(list, stType(ptr))
538void* _stvlNextPtr(
stvlist* list, stype type);
559#define stvlNextObj(list, class) objDynCast(class, (ObjInst*)_stvlNextPtr(list, stType(object)))
#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)
bool stEq(stype sta, stype stb)
int cursor
Current position (next variant to examine)
stvar * vars
Pointer to variant array.
int count
Total number of variants in array.
Runtime type system and type descriptor infrastructure.