CX Framework
Cross-platform C utility framework
Loading...
Searching...
No Matches
stvar.h File Reference

Variant type containers and type-safe variadic argument support. More...

#include <cx/cx.h>
#include <cx/stype/stype.h>

Go to the source code of this file.

Data Structures

struct  stvp
 
struct  stvlist
 

Macros

#define stvarInit(typen, val)   { .data = { .st_##typen = val }, ._type = stType(typen) }
 
#define stvar(typen, val)   ((stvar) { .data = stArg(typen, val), ._type = stType(typen) })
 
#define stvNone   ((stvar) { ._type = stType(none) })
 
#define stvark(key, typen, val)    ((stvar) { .data = stArg(typen, val), ._type = stType(typen), ._key = #key })
 
#define stvarkn(name, typen, val)    ((stvar) { .data = stArg(typen, val), ._type = stType(typen), ._key = (name) })
 
#define stvp(typen, pval)   ((stvp) { stCheckedPtrArg(typen, pval), NULL })
 
#define stvpk(key, typen, pval)   ((stvp) { stCheckedPtrArg(typen, pval), #key })
 
#define stvpNone   ((stvp) { NULL, NULL, NULL })
 
#define stvarSet(stv, type, val)   _stvarSet(stv, stCheckedArg(type, val))
 
#define stvarSetK(stv, key, type, val)   _stvarSetK(stv, stCheckedArg(type, val), #key)
 
#define stvarIs(svar, type)   _stvarIs(svar, stType(type))
 
#define stvarObj(class, svar)   (objDynCast(class, stvarObjInst(svar)))
 
#define stvlInitSA(list, vararray)   _stvlInitSA(list, (vararray).a)
 
#define stvlNext(list, type, pvar)   _stvlNext(list, stCheckedPtrArg(type, pvar))
 
#define stvlNextPtr(list)   _stvlNextPtr(list, stType(ptr))
 
#define stvlNextObj(list, class)   objDynCast(class, (ObjInst*)_stvlNextPtr(list, stType(object)))
 
#define stvlAt(list, idx, type)   (_stvlAt((list), (idx), stType(type)).st_##type)
 
#define stvlAtPtr(list, idx)   (_stvlAt((list), (idx), stType(ptr)).st_ptr)
 
#define stvlAtObj(list, idx, class)    objDynCast(class, (ObjInst*)_stvlAt((list), (idx), stType(object)).st_object)
 
#define stvlFind(list, key, type, pvar)   _stvlFind(list, #key, stCheckedPtrArg(type, pvar))
 
#define stvlFindPtr(list, key)   _stvlFindPtr(list, #key, stType(ptr))
 
#define stvlFindObj(list, key, class)    objDynCast(class, (ObjInst*)_stvlFindPtr(list, #key, stType(object)))
 
#define stvlFindVal(list, key, type)   (_stvlFindVal(list, #key, stType(type)).st_##type)
 
#define stvlHasKey(list, key)   _stvlHasKey(list, #key)
 

Typedefs

typedef struct stvp stvp
 
typedef struct stvlist stvlist
 

Functions

void stvarDestroy (stvar *stv)
 
void stvarCopy (stvar *dvar, stvar svar)
 
string stvarString (stvar *svar)
 
string * stvarStringPtr (stvar *svar)
 
ObjInststvarObjInst (stvar *svar)
 
ObjInst ** stvarObjInstPtr (stvar *svar)
 
void stvlInit (stvlist *list, int count, stvar *vars)
 
void stvlRewind (stvlist *list)
 

Detailed Description

Variant type containers and type-safe variadic argument support.

Definition in file stvar.h.