Add in constants which let you explicitly check if endian conversion would do anything. This was needed for a case where a piece of data was within a larger data type. When the larger data type was swapped, the location of the smaller data type would move.
--HG-- extra : convert_revision : 4c904c964678529c72b8f1044dfcb400604f6654
This commit is contained in:
parent
c6944e320c
commit
569e0e883b
|
@ -57,6 +57,8 @@
|
|||
#include <libkern/OSByteOrder.h>
|
||||
#endif
|
||||
|
||||
enum ByteOrder {BigEndianByteOrder, LittleEndianByteOrder};
|
||||
|
||||
//These functions actually perform the swapping for parameters
|
||||
//of various bit lengths
|
||||
static inline uint64_t
|
||||
|
@ -131,11 +133,13 @@ template <typename T> static inline T letobe(T value) {return swap_byte(value);}
|
|||
//For conversions not involving the guest system, we can define the functions
|
||||
//conditionally based on the BYTE_ORDER macro and outside of the namespaces
|
||||
#if defined(_BIG_ENDIAN) || BYTE_ORDER == BIG_ENDIAN
|
||||
const ByteOrder HostByteOrder = BigEndianByteOrder;
|
||||
template <typename T> static inline T htole(T value) {return swap_byte(value);}
|
||||
template <typename T> static inline T letoh(T value) {return swap_byte(value);}
|
||||
template <typename T> static inline T htobe(T value) {return value;}
|
||||
template <typename T> static inline T betoh(T value) {return value;}
|
||||
#elif defined(_LITTLE_ENDIAN) || BYTE_ORDER == LITTLE_ENDIAN
|
||||
const ByteOrder HostByteOrder = LittleEndianByteOrder;
|
||||
template <typename T> static inline T htole(T value) {return value;}
|
||||
template <typename T> static inline T letoh(T value) {return value;}
|
||||
template <typename T> static inline T htobe(T value) {return swap_byte(value);}
|
||||
|
@ -146,33 +150,35 @@ template <typename T> static inline T betoh(T value) {return swap_byte(value);}
|
|||
|
||||
namespace BigEndianGuest
|
||||
{
|
||||
template <typename T>
|
||||
static inline T gtole(T value) {return betole(value);}
|
||||
template <typename T>
|
||||
static inline T letog(T value) {return letobe(value);}
|
||||
template <typename T>
|
||||
static inline T gtobe(T value) {return value;}
|
||||
template <typename T>
|
||||
static inline T betog(T value) {return value;}
|
||||
template <typename T>
|
||||
static inline T htog(T value) {return htobe(value);}
|
||||
template <typename T>
|
||||
static inline T gtoh(T value) {return betoh(value);}
|
||||
const bool ByteOrderDiffers = (HostByteOrder != BigEndianByteOrder);
|
||||
template <typename T>
|
||||
static inline T gtole(T value) {return betole(value);}
|
||||
template <typename T>
|
||||
static inline T letog(T value) {return letobe(value);}
|
||||
template <typename T>
|
||||
static inline T gtobe(T value) {return value;}
|
||||
template <typename T>
|
||||
static inline T betog(T value) {return value;}
|
||||
template <typename T>
|
||||
static inline T htog(T value) {return htobe(value);}
|
||||
template <typename T>
|
||||
static inline T gtoh(T value) {return betoh(value);}
|
||||
}
|
||||
|
||||
namespace LittleEndianGuest
|
||||
{
|
||||
template <typename T>
|
||||
static inline T gtole(T value) {return value;}
|
||||
template <typename T>
|
||||
static inline T letog(T value) {return value;}
|
||||
template <typename T>
|
||||
static inline T gtobe(T value) {return letobe(value);}
|
||||
template <typename T>
|
||||
static inline T betog(T value) {return betole(value);}
|
||||
template <typename T>
|
||||
static inline T htog(T value) {return htole(value);}
|
||||
template <typename T>
|
||||
static inline T gtoh(T value) {return letoh(value);}
|
||||
const bool ByteOrderDiffers = (HostByteOrder != LittleEndianByteOrder);
|
||||
template <typename T>
|
||||
static inline T gtole(T value) {return value;}
|
||||
template <typename T>
|
||||
static inline T letog(T value) {return value;}
|
||||
template <typename T>
|
||||
static inline T gtobe(T value) {return letobe(value);}
|
||||
template <typename T>
|
||||
static inline T betog(T value) {return betole(value);}
|
||||
template <typename T>
|
||||
static inline T htog(T value) {return htole(value);}
|
||||
template <typename T>
|
||||
static inline T gtoh(T value) {return letoh(value);}
|
||||
}
|
||||
#endif // __SIM_BYTE_SWAP_HH__
|
||||
|
|
Loading…
Reference in a new issue