/* * Copyright (c) 1999-2002 Apple Computer, Inc. All rights reserved. * * @APPLE_LICENSE_HEADER_START@ * * "Portions Copyright (c) 1999 Apple Computer, Inc. All Rights * Reserved. This file contains Original Code and/or Modifications of * Original Code as defined in and that are subject to the Apple Public * Source License Version 1.0 (the 'License'). You may not use this file * except in compliance with the License. Please obtain a copy of the * License at http://www.apple.com/publicsource and read it before using * this file. * * The Original Code and all software distributed under the License are * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the * License for the specific language governing rights and limitations * under the License." * * @APPLE_LICENSE_HEADER_END@ */ /* * Copyright (c) 1992 NeXT Computer, Inc. * * Byte ordering conversion. * */ #ifndef _ARCHITECTURE_BYTE_ORDER_H_ #define _ARCHITECTURE_BYTE_ORDER_H_ #include typedef unsigned long NXSwappedFloat; typedef unsigned long long NXSwappedDouble; static __inline__ unsigned short NXSwapShort( unsigned short inv ) { return (unsigned short)OSSwapInt16((uint16_t)inv); } static __inline__ unsigned int NXSwapInt( unsigned int inv ) { return (unsigned int)OSSwapInt32((uint32_t)inv); } static __inline__ unsigned long NXSwapLong( unsigned long inv ) { return (unsigned long)OSSwapInt32((uint32_t)inv); } static __inline__ unsigned long long NXSwapLongLong( unsigned long long inv ) { return (unsigned long long)OSSwapInt64((uint64_t)inv); } static __inline__ NXSwappedFloat NXConvertHostFloatToSwapped(float x) { union fconv { float number; NXSwappedFloat sf; } u; u.number = x; return u.sf; } static __inline__ float NXConvertSwappedFloatToHost(NXSwappedFloat x) { union fconv { float number; NXSwappedFloat sf; } u; u.sf = x; return u.number; } static __inline__ NXSwappedDouble NXConvertHostDoubleToSwapped(double x) { union dconv { double number; NXSwappedDouble sd; } u; u.number = x; return u.sd; } static __inline__ double NXConvertSwappedDoubleToHost(NXSwappedDouble x) { union dconv { double number; NXSwappedDouble sd; } u; u.sd = x; return u.number; } static __inline__ NXSwappedFloat NXSwapFloat(NXSwappedFloat x) { return (NXSwappedFloat)OSSwapInt32((uint32_t)x); } static __inline__ NXSwappedDouble NXSwapDouble(NXSwappedDouble x) { return (NXSwappedDouble)OSSwapInt64((uint64_t)x); } /* * Identify the byte order * of the current host. */ enum NXByteOrder { NX_UnknownByteOrder, NX_LittleEndian, NX_BigEndian }; static __inline__ enum NXByteOrder NXHostByteOrder(void) { #if defined(__LITTLE_ENDIAN__) return NX_LittleEndian; #elif defined(__BIG_ENDIAN__) return NX_BigEndian; #else return NX_UnknownByteOrder; #endif } static __inline__ unsigned short NXSwapBigShortToHost( unsigned short x ) { return (unsigned short)OSSwapBigToHostInt16((uint16_t)x); } static __inline__ unsigned int NXSwapBigIntToHost( unsigned int x ) { return (unsigned int)OSSwapBigToHostInt32((uint32_t)x); } static __inline__ unsigned long NXSwapBigLongToHost( unsigned long x ) { return (unsigned long)OSSwapBigToHostInt32((uint32_t)x); } static __inline__ unsigned long long NXSwapBigLongLongToHost( unsigned long long x ) { return (unsigned long long)OSSwapBigToHostInt64((uint64_t)x); } static __inline__ double NXSwapBigDoubleToHost( NXSwappedDouble x ) { return NXConvertSwappedDoubleToHost((NXSwappedDouble)OSSwapBigToHostInt64((uint64_t)x)); } static __inline__ float NXSwapBigFloatToHost( NXSwappedFloat x ) { return NXConvertSwappedFloatToHost((NXSwappedFloat)OSSwapBigToHostInt32((uint32_t)x)); } static __inline__ unsigned short NXSwapHostShortToBig( unsigned short x ) { return (unsigned short)OSSwapHostToBigInt16((uint16_t)x); } static __inline__ unsigned int NXSwapHostIntToBig( unsigned int x ) { return (unsigned int)OSSwapHostToBigInt32((uint32_t)x); } static __inline__ unsigned long NXSwapHostLongToBig( unsigned long x ) { return (unsigned long)OSSwapHostToBigInt32((uint32_t)x); } static __inline__ unsigned long long NXSwapHostLongLongToBig( unsigned long long x ) { return (unsigned long long)OSSwapHostToBigInt64((uint64_t)x); } static __inline__ NXSwappedDouble NXSwapHostDoubleToBig( double x ) { return (NXSwappedDouble)OSSwapHostToBigInt64((uint64_t)NXConvertHostDoubleToSwapped(x)); } static __inline__ NXSwappedFloat NXSwapHostFloatToBig( float x ) { return (NXSwappedFloat)OSSwapHostToBigInt32((uint32_t)NXConvertHostFloatToSwapped(x)); } static __inline__ unsigned short NXSwapLittleShortToHost( unsigned short x ) { return (unsigned short)OSSwapLittleToHostInt16((uint16_t)x); } static __inline__ unsigned int NXSwapLittleIntToHost( unsigned int x ) { return (unsigned int)OSSwapLittleToHostInt32((uint32_t)x); } static __inline__ unsigned long NXSwapLittleLongToHost( unsigned long x ) { return (unsigned long)OSSwapLittleToHostInt32((uint32_t)x); } static __inline__ unsigned long long NXSwapLittleLongLongToHost( unsigned long long x ) { return (unsigned long long)OSSwapLittleToHostInt64((uint64_t)x); } static __inline__ double NXSwapLittleDoubleToHost( NXSwappedDouble x ) { return NXConvertSwappedDoubleToHost((NXSwappedDouble)OSSwapLittleToHostInt64((uint64_t)x)); } static __inline__ float NXSwapLittleFloatToHost( NXSwappedFloat x ) { return NXConvertSwappedFloatToHost((NXSwappedFloat)OSSwapLittleToHostInt32((uint32_t)x)); } static __inline__ unsigned short NXSwapHostShortToLittle( unsigned short x ) { return (unsigned short)OSSwapHostToLittleInt16((uint16_t)x); } static __inline__ unsigned int NXSwapHostIntToLittle( unsigned int x ) { return (unsigned int)OSSwapHostToLittleInt32((uint32_t)x); } static __inline__ unsigned long NXSwapHostLongToLittle( unsigned long x ) { return (unsigned long)OSSwapHostToLittleInt32((uint32_t)x); } static __inline__ unsigned long long NXSwapHostLongLongToLittle( unsigned long long x ) { return (unsigned long long)OSSwapHostToLittleInt64((uint64_t)x); } static __inline__ NXSwappedDouble NXSwapHostDoubleToLittle( double x ) { return (NXSwappedDouble)OSSwapHostToLittleInt64((uint64_t)NXConvertHostDoubleToSwapped(x)); } static __inline__ NXSwappedFloat NXSwapHostFloatToLittle( float x ) { return (NXSwappedFloat)OSSwapHostToLittleInt32((uint32_t)NXConvertHostFloatToSwapped(x)); } #endif /* _ARCHITECTURE_BYTE_ORDER_H_ */