CX Framework
Cross-platform C utility framework
Loading...
Searching...
No Matches
Variant Type Checking and Access

Macros

#define stvarIs(svar, type)   _stvarIs(svar, stType(type))
 
#define stvarObj(class, svar)   (objDynCast(class, stvarObjInst(svar)))
 

Functions

string stvarString (stvar *svar)
 
string * stvarStringPtr (stvar *svar)
 
ObjInststvarObjInst (stvar *svar)
 
ObjInst ** stvarObjInstPtr (stvar *svar)
 

Detailed Description

Functions and macros for checking variant types and extracting values.

Macro Definition Documentation

◆ stvarIs

#define stvarIs (   svar,
  type 
)    _stvarIs(svar, stType(type))

bool stvarIs(stvar *svar, type)

Check if a variant contains a value of the specified type.

Compares the variant's runtime type descriptor against the specified compile-time type. Returns false for NULL pointers.

Parameters
svarPointer to variant to check
typeType name to check for (e.g., int32, string)
Returns
true if variant contains the specified type, false otherwise

Example:

stvar v = stvar(int32, 42);
if (stvarIs(&v, int32)) {
int32 val = v.data.st_int32;
}
#define stvarIs(svar, type)
Definition stvar.h:523
#define stvar(typen, val)
Definition stvar.h:162

Definition at line 523 of file stvar.h.

◆ stvarObj

#define stvarObj (   class,
  svar 
)    (objDynCast(class, stvarObjInst(svar)))

ClassName* stvarObj(ClassName, stvar *svar)

Extract typed object from variant with runtime type checking.

Retrieves the object from the variant and performs a dynamic cast to the specified class type. Returns NULL if the variant does not contain an object or if the object is not compatible with the target class.

Parameters
classTarget class name (e.g., MyClass)
svarPointer to variant
Returns
Typed object pointer, or NULL if not compatible

Example:

stvar v = stvar(object, myTestObj);
TestClass *tc = stvarObj(TestClass, &v);
if (tc) {
// Use typed object
}
#define stvarObj(class, svar)
Definition stvar.h:642

Definition at line 642 of file stvar.h.

Function Documentation

◆ stvarObjInst()

ObjInst * stvarObjInst ( stvar svar)
inline

ObjInst* stvarObjInst(stvar *svar)

Extract object instance from variant if it contains an object.

Returns the untyped object pointer if the variant contains an object. For typed access, use stvarObj() macro instead.

Parameters
svarPointer to variant
Returns
Object instance pointer if variant contains object, NULL otherwise

Example:

stvar v = stvar(object, myObj);
ObjInst *obj = stvarObjInst(&v);
if (obj) {
// Use untyped object
}
ObjInst * stvarObjInst(stvar *svar)
Definition stvar.h:599

Definition at line 599 of file stvar.h.

References stvarIs.

◆ stvarObjInstPtr()

ObjInst ** stvarObjInstPtr ( stvar svar)
inline

ObjInst** stvarObjInstPtr(stvar *svar)

Get pointer to object instance field within variant.

Returns a pointer to the object field inside the variant's data union. Returns NULL if the variant does not contain an object.

Parameters
svarPointer to variant
Returns
Pointer to object field, or NULL if not an object variant

Definition at line 615 of file stvar.h.

References stvarIs.

◆ stvarString()

string stvarString ( stvar svar)
inline

string stvarString(stvar *svar)

Extract string value from variant if it contains a string.

Convenience accessor that checks the type and returns the string value in one operation. Returns NULL if the variant does not contain a string or if the pointer is NULL.

Parameters
svarPointer to variant
Returns
String value if variant contains string, NULL otherwise

Example:

stvar v = stvar(string, _SL("hello"));
string s = stvarString(&v);
if (s) {
// Use string
}
#define _SL(s)
Inline ASCII string literal with compile-time embedded length (STR_LEN8). Content must be < 200 bytes...
Definition strliteral.h:207
string stvarString(stvar *svar)
Definition stvar.h:548

Definition at line 548 of file stvar.h.

References stvarIs.

◆ stvarStringPtr()

string * stvarStringPtr ( stvar svar)
inline

string* stvarStringPtr(stvar *svar)

Get pointer to string value within variant.

Returns a pointer to the string field inside the variant's data union, allowing modification of the stored string. Returns NULL if the variant does not contain a string.

Parameters
svarPointer to variant
Returns
Pointer to string field, or NULL if not a string variant

Example:

stvar v = stvar(string, _SL("hello"));
string *ps = stvarStringPtr(&v);
if (ps) {
strAppend(ps, _SL(" world"));
}
bool strAppend(strhandle io, strref s)
string * stvarStringPtr(stvar *svar)
Definition stvar.h:574

Definition at line 574 of file stvar.h.

References stvarIs.