Skip to content

Type Enum

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))