63 lines
1.3 KiB
C
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)
|