Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

bytes.h

Go to the documentation of this file.
00001 // bytes.h
00002 // 
00003 // Copyright (C) 2001, Colin Walters <walters@verbum.org>
00004 //
00005 // This program is free software; you can redistribute it and/or
00006 // modify it under the terms of the GNU General Public License
00007 // as published by the Free Software Foundation; either version 2
00008 // of the License, or (at your option) any later version.
00009 
00010 #ifndef _BYTES_H_
00011 #define _BYTES_H_
00012 
00013 #ifndef _WIN32
00014 #ifndef MACOSX_PB
00015 #include <config.h>
00016 #endif /* MACOSX_PB */
00017 #endif /* _WIN32 */
00018 
00019 /* Use the system byteswap.h definitions if we have them */
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_

Generated on Sat Jan 14 22:30:32 2006 for Celestia by  doxygen 1.4.1