1*52a38012Sejakowatz // Modified BeOS header. Just here to be able to compile and test BResources. 2*52a38012Sejakowatz // To be replaced by the OpenBeOS version to be provided by the IK Team. 3*52a38012Sejakowatz 4*52a38012Sejakowatz #ifndef _sk_byte_order_h_ 5*52a38012Sejakowatz #define _sk_byte_order_h_ 6*52a38012Sejakowatz 7*52a38012Sejakowatz #include <BeBuild.h> 8*52a38012Sejakowatz #include <endian.h> 9*52a38012Sejakowatz #include <SupportDefs.h> 10*52a38012Sejakowatz #include <TypeConstants.h> /* For convenience */ 11*52a38012Sejakowatz 12*52a38012Sejakowatz #ifdef __cplusplus 13*52a38012Sejakowatz extern "C" { 14*52a38012Sejakowatz #endif 15*52a38012Sejakowatz 16*52a38012Sejakowatz /*----------------------------------------------------------------------*/ 17*52a38012Sejakowatz /*------- Swap-direction constants, and swapping functions -------------*/ 18*52a38012Sejakowatz 19*52a38012Sejakowatz typedef enum { 20*52a38012Sejakowatz B_SWAP_HOST_TO_LENDIAN, 21*52a38012Sejakowatz B_SWAP_HOST_TO_BENDIAN, 22*52a38012Sejakowatz B_SWAP_LENDIAN_TO_HOST, 23*52a38012Sejakowatz B_SWAP_BENDIAN_TO_HOST, 24*52a38012Sejakowatz B_SWAP_ALWAYS 25*52a38012Sejakowatz } swap_action; 26*52a38012Sejakowatz 27*52a38012Sejakowatz extern status_t swap_data(type_code type, void *data, size_t length, 28*52a38012Sejakowatz swap_action action); 29*52a38012Sejakowatz 30*52a38012Sejakowatz extern bool is_type_swapped(type_code type); 31*52a38012Sejakowatz 32*52a38012Sejakowatz 33*52a38012Sejakowatz /*-----------------------------------------------------------------------*/ 34*52a38012Sejakowatz /*----- Private implementations -----------------------------------------*/ 35*52a38012Sejakowatz extern double __swap_double(double arg); 36*52a38012Sejakowatz extern float __swap_float(float arg); 37*52a38012Sejakowatz extern uint64 __swap_int64(uint64 uarg); 38*52a38012Sejakowatz extern uint32 __swap_int32(uint32 uarg); 39*52a38012Sejakowatz extern uint16 __swap_int16(uint16 uarg); 40*52a38012Sejakowatz /*-------------------------------------------------------------*/ 41*52a38012Sejakowatz 42*52a38012Sejakowatz 43*52a38012Sejakowatz /*-------------------------------------------------------------*/ 44*52a38012Sejakowatz /*--------- Host is Little --------------------------------------*/ 45*52a38012Sejakowatz 46*52a38012Sejakowatz #if BYTE_ORDER == __LITTLE_ENDIAN 47*52a38012Sejakowatz #define B_HOST_IS_LENDIAN 1 48*52a38012Sejakowatz #define B_HOST_IS_BENDIAN 0 49*52a38012Sejakowatz 50*52a38012Sejakowatz /*--------- Host Native -> Little --------------------*/ 51*52a38012Sejakowatz 52*52a38012Sejakowatz #define B_HOST_TO_LENDIAN_DOUBLE(arg) (double)(arg) 53*52a38012Sejakowatz #define B_HOST_TO_LENDIAN_FLOAT(arg) (float)(arg) 54*52a38012Sejakowatz #define B_HOST_TO_LENDIAN_INT64(arg) (uint64)(arg) 55*52a38012Sejakowatz #define B_HOST_TO_LENDIAN_INT32(arg) (uint32)(arg) 56*52a38012Sejakowatz #define B_HOST_TO_LENDIAN_INT16(arg) (uint16)(arg) 57*52a38012Sejakowatz 58*52a38012Sejakowatz /*--------- Host Native -> Big ------------------------*/ 59*52a38012Sejakowatz #define B_HOST_TO_BENDIAN_DOUBLE(arg) __swap_double(arg) 60*52a38012Sejakowatz #define B_HOST_TO_BENDIAN_FLOAT(arg) __swap_float(arg) 61*52a38012Sejakowatz #define B_HOST_TO_BENDIAN_INT64(arg) __swap_int64(arg) 62*52a38012Sejakowatz #define B_HOST_TO_BENDIAN_INT32(arg) __swap_int32(arg) 63*52a38012Sejakowatz #define B_HOST_TO_BENDIAN_INT16(arg) __swap_int16(arg) 64*52a38012Sejakowatz 65*52a38012Sejakowatz /*--------- Little -> Host Native ---------------------*/ 66*52a38012Sejakowatz #define B_LENDIAN_TO_HOST_DOUBLE(arg) (double)(arg) 67*52a38012Sejakowatz #define B_LENDIAN_TO_HOST_FLOAT(arg) (float)(arg) 68*52a38012Sejakowatz #define B_LENDIAN_TO_HOST_INT64(arg) (uint64)(arg) 69*52a38012Sejakowatz #define B_LENDIAN_TO_HOST_INT32(arg) (uint32)(arg) 70*52a38012Sejakowatz #define B_LENDIAN_TO_HOST_INT16(arg) (uint16)(arg) 71*52a38012Sejakowatz 72*52a38012Sejakowatz /*--------- Big -> Host Native ------------------------*/ 73*52a38012Sejakowatz #define B_BENDIAN_TO_HOST_DOUBLE(arg) __swap_double(arg) 74*52a38012Sejakowatz #define B_BENDIAN_TO_HOST_FLOAT(arg) __swap_float(arg) 75*52a38012Sejakowatz #define B_BENDIAN_TO_HOST_INT64(arg) __swap_int64(arg) 76*52a38012Sejakowatz #define B_BENDIAN_TO_HOST_INT32(arg) __swap_int32(arg) 77*52a38012Sejakowatz #define B_BENDIAN_TO_HOST_INT16(arg) __swap_int16(arg) 78*52a38012Sejakowatz 79*52a38012Sejakowatz #else /* __LITTLE_ENDIAN */ 80*52a38012Sejakowatz 81*52a38012Sejakowatz 82*52a38012Sejakowatz /*-------------------------------------------------------------*/ 83*52a38012Sejakowatz /*--------- Host is Big --------------------------------------*/ 84*52a38012Sejakowatz 85*52a38012Sejakowatz #define B_HOST_IS_LENDIAN 0 86*52a38012Sejakowatz #define B_HOST_IS_BENDIAN 1 87*52a38012Sejakowatz 88*52a38012Sejakowatz /*--------- Host Native -> Little -------------------*/ 89*52a38012Sejakowatz #define B_HOST_TO_LENDIAN_DOUBLE(arg) __swap_double(arg) 90*52a38012Sejakowatz #define B_HOST_TO_LENDIAN_FLOAT(arg) __swap_float(arg) 91*52a38012Sejakowatz #define B_HOST_TO_LENDIAN_INT64(arg) __swap_int64(arg) 92*52a38012Sejakowatz #define B_HOST_TO_LENDIAN_INT32(arg) __swap_int32(arg) 93*52a38012Sejakowatz #define B_HOST_TO_LENDIAN_INT16(arg) __swap_int16(arg) 94*52a38012Sejakowatz 95*52a38012Sejakowatz /*--------- Host Native -> Big ------------------------*/ 96*52a38012Sejakowatz #define B_HOST_TO_BENDIAN_DOUBLE(arg) (double)(arg) 97*52a38012Sejakowatz #define B_HOST_TO_BENDIAN_FLOAT(arg) (float)(arg) 98*52a38012Sejakowatz #define B_HOST_TO_BENDIAN_INT64(arg) (uint64)(arg) 99*52a38012Sejakowatz #define B_HOST_TO_BENDIAN_INT32(arg) (uint32)(arg) 100*52a38012Sejakowatz #define B_HOST_TO_BENDIAN_INT16(arg) (uint16)(arg) 101*52a38012Sejakowatz 102*52a38012Sejakowatz /*--------- Little -> Host Native ----------------------*/ 103*52a38012Sejakowatz #define B_LENDIAN_TO_HOST_DOUBLE(arg) __swap_double(arg) 104*52a38012Sejakowatz #define B_LENDIAN_TO_HOST_FLOAT(arg) __swap_float(arg) 105*52a38012Sejakowatz #define B_LENDIAN_TO_HOST_INT64(arg) __swap_int64(arg) 106*52a38012Sejakowatz #define B_LENDIAN_TO_HOST_INT32(arg) __swap_int32(arg) 107*52a38012Sejakowatz #define B_LENDIAN_TO_HOST_INT16(arg) __swap_int16(arg) 108*52a38012Sejakowatz 109*52a38012Sejakowatz /*--------- Big -> Host Native -------------------------*/ 110*52a38012Sejakowatz #define B_BENDIAN_TO_HOST_DOUBLE(arg) (double)(arg) 111*52a38012Sejakowatz #define B_BENDIAN_TO_HOST_FLOAT(arg) (float)(arg) 112*52a38012Sejakowatz #define B_BENDIAN_TO_HOST_INT64(arg) (uint64)(arg) 113*52a38012Sejakowatz #define B_BENDIAN_TO_HOST_INT32(arg) (uint32)(arg) 114*52a38012Sejakowatz #define B_BENDIAN_TO_HOST_INT16(arg) (uint16)(arg) 115*52a38012Sejakowatz 116*52a38012Sejakowatz #endif /* __LITTLE_ENDIAN */ 117*52a38012Sejakowatz 118*52a38012Sejakowatz 119*52a38012Sejakowatz /*-------------------------------------------------------------*/ 120*52a38012Sejakowatz /*--------- Just-do-it macros ---------------------------------*/ 121*52a38012Sejakowatz #define B_SWAP_DOUBLE(arg) __swap_double(arg) 122*52a38012Sejakowatz #define B_SWAP_FLOAT(arg) __swap_float(arg) 123*52a38012Sejakowatz #define B_SWAP_INT64(arg) __swap_int64(arg) 124*52a38012Sejakowatz #define B_SWAP_INT32(arg) __swap_int32(arg) 125*52a38012Sejakowatz #define B_SWAP_INT16(arg) __swap_int16(arg) 126*52a38012Sejakowatz 127*52a38012Sejakowatz 128*52a38012Sejakowatz /*-------------------------------------------------------------*/ 129*52a38012Sejakowatz /*---------Berkeley macros -----------------------------------*/ 130*52a38012Sejakowatz #define htonl(x) B_HOST_TO_BENDIAN_INT32(x) 131*52a38012Sejakowatz #define ntohl(x) B_BENDIAN_TO_HOST_INT32(x) 132*52a38012Sejakowatz #define htons(x) B_HOST_TO_BENDIAN_INT16(x) 133*52a38012Sejakowatz #define ntohs(x) B_BENDIAN_TO_HOST_INT16(x) 134*52a38012Sejakowatz 135*52a38012Sejakowatz #ifdef __cplusplus 136*52a38012Sejakowatz } 137*52a38012Sejakowatz #endif /* __cplusplus */ 138*52a38012Sejakowatz 139*52a38012Sejakowatz /*-------------------------------------------------------------*/ 140*52a38012Sejakowatz /*-------------------------------------------------------------*/ 141*52a38012Sejakowatz 142*52a38012Sejakowatz #endif // _sk_byte_order_h_ 143