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

Runtime type system and type descriptor infrastructure. More...

#include <cx/debug/assert.h>
#include <cx/platform/base.h>
#include <cx/platform/cpp.h>
#include <cx/utils/macros/optarg.h>
#include <cx/utils/macros/salieri.h>
#include <cx/utils/macros/unused.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <string.h>

Go to the source code of this file.

Macros

#define stTypeCast(name, v)   ((SType_##name)(v))
 
#define stPtrCast(name, v)   ((SType_##name*)(v))
 
#define stTypeId(name)   STypeId_##name
 
#define stTypeSize(name)   STypeSize_##name
 
#define stHasFlag(st, fname)   ((st >> 8) & stFlag(fname))
 
#define stGetId(st)   (st & 0xff)
 
#define stGetFlags(st)   ((st >> 8) & 0xff)
 
#define stGetSize(st)   (st >> 16)
 
#define stTypeFlags(name)   STypeFlags_##name
 
#define stCheck(type, val)   STypeCheck_##type(type, val)
 
#define stCheckPtr(type, ptr)   STypeCheckPtr_##type(type, ptr)
 
#define stRvalAddr(type, rval)   ((stStorageType(type)[1]) { rval })
 
#define stType(name)   stType_##name
 
#define stFullType(name)   stFullType_##name
 
#define stArg(type, val)   STypeArg_##type(type, val)
 
#define stArgPtr(type, val)   STypeArgPtr_##type(type, val)
 
#define stCheckedArg(type, val)   STypeCheckedArg_##type(type, val)
 
#define stCheckedPtrArg(type, val)   STypeCheckedPtrArg_##type(type, val)
 
#define stStored(st, storage)    (stHasFlag(st, PassPtr) ? stgeneric(ptr, (void*)(storage)) : _stStoredVal(st, storage))
 
#define stStoredPtr(st, storage)    (stHasFlag(st, PassPtr) ? &stgeneric(ptr, ((void*)(storage))) : (stgeneric*)((void*)(storage)))
 
#define stGenPtr(st, gen)   (stHasFlag(st, PassPtr) ? (gen).st_ptr : &(gen))
 
#define stDestroy(type, pobj, ...)    _stDestroy(stFullType(type), stArgPtr(type, pobj), opt_flags(__VA_ARGS__))
 
#define stCmp(type, obj1, obj2, ...)    _stCmp(stFullType(type), stArg(type, obj1), stArg(type, obj2), opt_flags(__VA_ARGS__))
 
#define stCopy(type, pdest, src, ...)    _stCopy(stFullType(type), stArgPtr(type, pdest), stArg(type, src), opt_flags(__VA_ARGS__))
 
#define stHash(type, obj, ...)   _stHash(stFullType(type), stArg(type, obj), opt_flags(__VA_ARGS__))
 
#define stConvert(desttype, pdest, srctype, src, ...)
 

Typedefs

typedef void(* stDtorFunc) (stype st, stgeneric *gen, flags_t flags)
 
typedef intptr(* stCmpFunc) (stype st, stgeneric gen1, stgeneric gen2, flags_t flags)
 
typedef uint32(* stHashFunc) (stype st, stgeneric gen, flags_t flags)
 
typedef void(* stCopyFunc) (stype st, _stCopyDest_Anno_(st) stgeneric *dest, stgeneric src, flags_t flags)
 
typedef bool(* stConvertFunc) (stype destst, _stCopyDest_Anno_(destst) stgeneric *dest, stype srcst, stgeneric src, flags_t flags)
 

Enumerations

enum  STYPE_OPS_FLAGS { ST_CaseInsensitive = 0x00000001 , ST_Equality = 0x00000002 , ST_Overflow = 0x00000004 , ST_Lossless = 0x00000008 }
 

Functions

bool stEq (stype sta, stype stb)
 

Detailed Description

Runtime type system and type descriptor infrastructure.

Definition in file stype.h.