00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef __LESWAPS_H
00010 #define __LESWAPS_H
00011
00012 #include "LETypes.h"
00013
00014 U_NAMESPACE_BEGIN
00015
00022 #define SWAPW(value) (LESwaps::isBigEndian() ? (value) : LESwaps::swapWord(value))
00023
00024
00031 #define SWAPL(value) (LESwaps::isBigEndian() ? (value) : LESwaps::swapLong(value))
00032
00044 class U_LAYOUT_API LESwaps {
00045 public:
00046
00058 static le_bool isBigEndian()
00059 {
00060 const le_uint16 word = 0xFF00;
00061
00062 return *((le_uint8 *) &word);
00063 };
00064
00075 static le_uint16 swapWord(le_uint16 value)
00076 {
00077 return (((le_uint8) (value >> 8)) | (value << 8));
00078 };
00079
00090 static le_uint32 swapLong(le_uint32 value)
00091 {
00092 return swapWord((le_uint16) (value >> 16)) | (swapWord((le_uint16) value) << 16);
00093 };
00094
00095 private:
00096 LESwaps() {}
00097 };
00098
00099 U_NAMESPACE_END
00100 #endif