123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- /***************************************************************************
- * 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
|