95 lines
2.2 KiB
C
95 lines
2.2 KiB
C
#include <fx/int-primitives.h>
|
|
#include <fx/value-type.h>
|
|
|
|
bool fx_type_is_value_type(fx_type_id ty)
|
|
{
|
|
if (!ty) {
|
|
return false;
|
|
}
|
|
|
|
return ty->a.p00 == __FX_VALUE_TYPE_BASEID;
|
|
}
|
|
|
|
unsigned int __fx_type_get_value_type(fx_type_id ty)
|
|
{
|
|
if (ty->a.p00 != __FX_VALUE_TYPE_BASEID) {
|
|
return 0;
|
|
}
|
|
|
|
return ty->a.p01;
|
|
}
|
|
|
|
size_t __fx_value_type_get_size(unsigned int ty)
|
|
{
|
|
switch (ty) {
|
|
case __FX_VALUE_TYPE_BOOL:
|
|
return sizeof(bool);
|
|
case __FX_VALUE_TYPE_I16:
|
|
return sizeof(i16);
|
|
case __FX_VALUE_TYPE_U16:
|
|
return sizeof(u16);
|
|
case __FX_VALUE_TYPE_I32:
|
|
return sizeof(i32);
|
|
case __FX_VALUE_TYPE_U32:
|
|
return sizeof(u32);
|
|
case __FX_VALUE_TYPE_I64:
|
|
return sizeof(i64);
|
|
case __FX_VALUE_TYPE_U64:
|
|
return sizeof(u64);
|
|
case __FX_VALUE_TYPE_IPTR:
|
|
return sizeof(iptr);
|
|
case __FX_VALUE_TYPE_UPTR:
|
|
return sizeof(uptr);
|
|
|
|
case __FX_VALUE_TYPE_SBYTE:
|
|
return sizeof(sbyte);
|
|
case __FX_VALUE_TYPE_BYTE:
|
|
return sizeof(byte);
|
|
case __FX_VALUE_TYPE_SHORT:
|
|
return sizeof(short);
|
|
case __FX_VALUE_TYPE_USHORT:
|
|
return sizeof(unsigned short);
|
|
case __FX_VALUE_TYPE_INT:
|
|
return sizeof(int);
|
|
case __FX_VALUE_TYPE_UINT:
|
|
return sizeof(unsigned int);
|
|
case __FX_VALUE_TYPE_LONG:
|
|
return sizeof(long);
|
|
case __FX_VALUE_TYPE_ULONG:
|
|
return sizeof(unsigned long);
|
|
case __FX_VALUE_TYPE_LONGLONG:
|
|
return sizeof(long long);
|
|
case __FX_VALUE_TYPE_ULONGLONG:
|
|
return sizeof(unsigned long long);
|
|
case __FX_VALUE_TYPE_SIZE:
|
|
return sizeof(size_t);
|
|
|
|
case __FX_VALUE_TYPE_FLOAT:
|
|
return sizeof(float);
|
|
case __FX_VALUE_TYPE_DOUBLE:
|
|
return sizeof(double);
|
|
|
|
case __FX_VALUE_TYPE_CSTR:
|
|
return sizeof(const char *);
|
|
case __FX_VALUE_TYPE_POINTER:
|
|
return sizeof(void *);
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
/*** CLASS DEFINITION *********************************************************/
|
|
|
|
FX_TYPE_CLASS_BEGIN(fx_value_type)
|
|
FX_TYPE_VTABLE_INTERFACE_BEGIN(fx_object, FX_TYPE_OBJECT)
|
|
FX_INTERFACE_ENTRY(to_string) = NULL;
|
|
FX_TYPE_VTABLE_INTERFACE_END(fx_object, FX_TYPE_OBJECT)
|
|
FX_TYPE_CLASS_END(fx_value_type)
|
|
|
|
FX_TYPE_DEFINITION_BEGIN(fx_value_type)
|
|
type_info->ty_id.a.p00 = __FX_VALUE_TYPE_BASEID;
|
|
type_info->ty_id.a.p01 = 0;
|
|
FX_TYPE_NAME("fx.value-type");
|
|
FX_TYPE_CLASS(fx_value_type_class);
|
|
FX_TYPE_DEFINITION_END(fx_value_type)
|