Files
fx/fx/int/u64.c
T

63 lines
1.3 KiB
C

#include <fx/int.h>
#include <fx/value-type.h>
/* clang-format off */
#define SWAP64(v) \
(((v << 56) & 0xFF00000000000000) | ((v >> 56) & 0x00000000000000FF) \
|((v << 40) & 0x00FF000000000000) | ((v >> 40) & 0x000000000000FF00) \
|((v << 24) & 0x0000FF0000000000) | ((v >> 24) & 0x0000000000FF0000) \
|((v << 8) & 0x000000FF00000000) | ((v >> 8) & 0x00000000FF000000))
/* clang-format on */
u64 fx_u64_htob(u64 v)
{
#if FX_ENDIAN == 1
return v;
#else
return SWAP64(v);
#endif
}
u64 fx_u64_htos(u64 v)
{
#if FX_ENDIAN == 0
return v;
#else
return SWAP64(v);
#endif
}
u64 fx_u64_btoh(u64 v)
{
#if FX_ENDIAN == 1
return v;
#else
return SWAP64(v);
#endif
}
u64 fx_u64_stoh(u64 v)
{
#if FX_ENDIAN == 0
return v;
#else
return SWAP64(v);
#endif
}
/*** CLASS DEFINITION *********************************************************/
FX_TYPE_CLASS_BEGIN(fx_u64)
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_u64)
FX_TYPE_DEFINITION_BEGIN(fx_u64)
__FX_VALUE_TYPE_ID(U64);
FX_TYPE_EXTENDS(FX_TYPE_VALUE_TYPE);
FX_TYPE_NAME("fx.u64");
FX_TYPE_CLASS(fx_u64_class);
FX_TYPE_INSTANCE_PRIVATE(u64);
FX_TYPE_DEFINITION_END(fx_u64)