00001
00002
00003
00004
00005
00006
00007
00008 #ifndef __LESWAPS_H
00009 #define __LESWAPS_H
00010
00011 #include "LETypes.h"
00012
00018 U_NAMESPACE_BEGIN
00019
00026 #if defined(U_IS_BIG_ENDIAN)
00027 #if U_IS_BIG_ENDIAN
00028 #define SWAPW(value) (value)
00029 #else
00030 #define SWAPW(value) LESwaps::swapWord(value)
00031 #endif
00032 #else
00033 #define SWAPW(value) (LESwaps::isBigEndian() ? (value) : LESwaps::swapWord(value))
00034 #endif
00035
00042 #if defined(U_IS_BIG_ENDIAN)
00043 #if U_IS_BIG_ENDIAN
00044 #define SWAPL(value) (value)
00045 #else
00046 #define SWAPL(value) LESwaps::swapLong(value)
00047 #endif
00048 #else
00049 #define SWAPL(value) (LESwaps::isBigEndian() ? (value) : LESwaps::swapLong(value))
00050 #endif
00051
00063 class U_LAYOUT_API LESwaps {
00064 public:
00065
00066 #if !defined(U_IS_BIG_ENDIAN)
00067
00078 static le_uint8 isBigEndian()
00079 {
00080 const le_uint16 word = 0xFF00;
00081
00082 return *((le_uint8 *) &word);
00083 };
00084 #endif
00085
00096 static le_uint16 swapWord(le_uint16 value)
00097 {
00098 return (((le_uint8) (value >> 8)) | (value << 8));
00099 };
00100
00111 static le_uint32 swapLong(le_uint32 value)
00112 {
00113 return swapWord((le_uint16) (value >> 16)) | (swapWord((le_uint16) value) << 16);
00114 };
00115
00116 private:
00117 LESwaps() {}
00118 };
00119
00120 U_NAMESPACE_END
00121 #endif