/*************************************************************************** * E-Com Technology Ltd. * * ECOMPACS DICOM Network Transport Libraries * Version 0.1 Beta ***************************************************************************/ ////////////////////////////////////////////////////////////////////// // Architectually Neutral Endian types. // // Note these are not done with C++ templates. This is a design choice. ////////////////////////////////////////////////////////////////////// #if NATIVE_ENDIAN == LITTLE_ENDIAN ////////////////////////////////////////////////////////////////////// // pack c1 and c2 into u1 inline void Pack (BYTE c1, BYTE c2, UINT16 & u1) { u1 = ( ( (UINT16)c1)<<8)+ ( (UINT16)c2); // little endian } ////////////////////////////////////////////////////////////////////// // unpack c1 and c2 from u1 inline void Pack (UINT16 u1, BYTE & c1, BYTE & c2) { c1 = (u1 >> 8); // little endian c2 = (u1 & 0xff); } #else ////////////////////////////////////////////////////////////////////// // pack c1 and c2 into u1 inline void Pack (BYTE c1, BYTE c2, UINT16 & u1) { u1 = ( ( (UINT16)c2)<<8)+ ( (UINT16)c1); // big endian } ////////////////////////////////////////////////////////////////////// // unpack c1 and c2 from u1 inline void Pack (UINT16 u1, BYTE & c1, BYTE & c2) { c2 = (u1 >> 8); // big endian c1 = (u1 & 0xff); } #endif inline UINT16 SwitchEndian(UINT16 x) { return ( ((x >> 8) & 0x00ff) | ((x << 8) & 0xff00) ); } inline UINT32 SwitchEndian(UINT32 x) { return ( ((UINT32) SwitchEndian ((UINT16) (x >> 16))) | ((UINT32) (SwitchEndian ((UINT16) (x & 0x0000ffff)) << 16) )); } inline INT16 SwitchEndian(INT16 x) { return ((INT16) SwitchEndian((UINT16) x) ); } inline INT32 SwitchEndian(INT32 x) { return ((INT32) SwitchEndian((UINT32) x) ); } #if NATIVE_ENDIAN == LITTLE_ENDIAN #define LE_UINT16 UINT16 #define LE_UINT32 UINT32 #define LE_INT16 INT16 #define LE_INT32 INT32 #define XE_UINTX BE_UINT16 #define UINTX UINT16 #undef XE_UINTX #undef UINTX #define XE_UINTX BE_UINT32 #define UINTX UINT32 #undef XE_UINTX #undef UINTX #define XE_UINTX BE_INT16 #define UINTX INT16 #undef XE_UINTX #undef UINTX #define XE_UINTX BE_INT32 #define UINTX INT32 #undef XE_UINTX #undef UINTX #else #define BE_UINT16 UINT16 #define BE_UINT32 UINT32 #define BE_INT16 INT16 #define BE_INT32 INT32 #define XE_UINTX LE_UINT16 #define UINTX UINT16 #undef XE_UINTX #undef UINTX #define XE_UINTX LE_UINT32 #define UINTX UINT32 #undef XE_UINTX #undef UINTX #define XE_UINTX LE_INT16 #define UINTX INT16 #undef XE_UINTX #undef UINTX #define XE_UINTX LE_INT32 #define UINTX INT32 #undef XE_UINTX #undef UINTX #endif