include/types/type_enum.h View source View on GitHub
enum type_enum {
TYPE_NONE,
TYPE_INT8,
TYPE_UINT8,
TYPE_INT16,
TYPE_UINT16,
TYPE_INT32,
TYPE_UINT32,
TYPE_INT64,
TYPE_UINT64,
TYPE_FLOAT32,
TYPE_FLOAT64,
TYPE_BOOL,
TYPE_POINTER,
TYPE_UNKNOWN,
TYPE_MAX,
};
size_t type_enum_width(enum type_enum type);
#define TYPE_TO_ENUM(X) \
_Generic((X), \
int8_t: TYPE_INT8, \
uint8_t: TYPE_UINT8, \
int16_t: TYPE_INT16, \
uint16_t: TYPE_UINT16, \
int32_t: TYPE_INT32, \
uint32_t: TYPE_UINT32, \
int64_t: TYPE_INT64, \
uint64_t: TYPE_UINT64, \
float: TYPE_FLOAT32, \
double: TYPE_FLOAT64, \
bool: TYPE_BOOL, \
default: _Generic((void *) (X), \
void *: TYPE_POINTER, \
const void *: TYPE_POINTER, \
volatile void *: TYPE_POINTER, \
const volatile void *: TYPE_POINTER, \
default: TYPE_UNKNOWN))