94,112c94,110
< //This lets the compiler figure out how to call the swap_byte functions above
< //for different data types.
< static inline uint64_t swap_byte(uint64_t x) {return swap_byte64(x);}
< static inline int64_t swap_byte(int64_t x) {return swap_byte64((uint64_t)x);}
< static inline uint32_t swap_byte(uint32_t x) {return swap_byte32(x);}
< static inline int32_t swap_byte(int32_t x) {return swap_byte32((uint32_t)x);}
< //This is to prevent the following two functions from compiling on
< //64bit machines. It won't detect everything, so it should be changed.
< #ifndef __x86_64__
< static inline long swap_byte(long x) {return swap_byte32((long)x);}
< static inline unsigned long swap_byte(unsigned long x)
< { return swap_byte32((unsigned long)x);}
< #endif
< static inline uint16_t swap_byte(uint16_t x) {return swap_byte32(x);}
< static inline int16_t swap_byte(int16_t x) {return swap_byte16((uint16_t)x);}
< static inline uint8_t swap_byte(uint8_t x) {return x;}
< static inline int8_t swap_byte(int8_t x) {return x;}
< static inline double swap_byte(double x) {return swap_byte64((uint64_t)x);}
< static inline float swap_byte(float x) {return swap_byte32((uint32_t)x);}
---
> // This function lets the compiler figure out how to call the
> // swap_byte functions above for different data types. Since the
> // sizeof() values are known at compiel time, it should inline to a
> // direct call to the right swap_byteNN() function.
> template <typename T>
> static inline T swap_byte(T x) {
> if (sizeof(T) == 8)
> return swap_byte64((uint64_t)x);
> else if (sizeof(T) == 4)
> return swap_byte32((uint32_t)x);
> else if (sizeof(T) == 2)
> return swap_byte16((uint16_t)x);
> else if (sizeof(T) == 1)
> return x;
> else
> panic("Can't byte-swap values larger than 64 bits");
> }