00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef _BYTES_H_
00011 #define _BYTES_H_
00012
00013 #ifndef _WIN32
00014 #ifndef MACOSX_PB
00015 #include <config.h>
00016 #endif
00017 #endif
00018
00019
00020 #ifdef HAVE_BYTESWAP_H
00021 #include <byteswap.h>
00022 #else
00023 static unsigned short bswap_16 (unsigned short val)
00024 {
00025 return ((((val) >> 8) & 0xff) | (((val) & 0xff) << 8));
00026 }
00027
00028 static unsigned int bswap_32(unsigned int val) {
00029 return (((val) & 0xff000000) >> 24) | (((val) & 0x00ff0000) >> 8) |
00030 (((val) & 0x0000ff00) << 8) | (((val) & 0x000000ff) << 24);
00031 }
00032 #endif
00033
00034 #define SWAP_FLOAT(x, y) do { *(unsigned int *)&x = bswap_32( *(unsigned int *)&y ); } while (0)
00035
00036 #ifdef WORDS_BIGENDIAN
00037
00038 #define LE_TO_CPU_INT16(ret, val) (ret = bswap_16(val))
00039
00040 #define LE_TO_CPU_INT32(ret, val) (ret = bswap_32(val))
00041
00042 #define LE_TO_CPU_FLOAT(ret, val) SWAP_FLOAT(ret, val)
00043
00044 #define BE_TO_CPU_INT16(ret, val) (ret = val)
00045
00046 #define BE_TO_CPU_INT32(ret, val) (ret = val)
00047
00048 #define BE_TO_CPU_FLOAT(ret, val) (ret = val)
00049
00050 #else
00051
00052 #define BE_TO_CPU_INT16(ret, val) (ret = bswap_16(val))
00053
00054 #define BE_TO_CPU_INT32(ret, val) (ret = bswap_32(val))
00055
00056 #define BE_TO_CPU_FLOAT(ret, val) SWAP_FLOAT(ret, val)
00057
00058 #define LE_TO_CPU_INT16(ret, val) (ret = val)
00059
00060 #define LE_TO_CPU_INT32(ret, val) (ret = val)
00061
00062 #define LE_TO_CPU_FLOAT(ret, val) (ret = val)
00063
00064 #endif
00065
00066 #endif // _BYTES_H_