| // { dg-do run } |
| #include <sys/types.h> |
| #include <algorithm> |
| typedef short _eb91_int16_t; |
| typedef char _eb91_int8_t; |
| typedef unsigned char _eb91_u_int8_t; |
| typedef unsigned short _eb91_u_int16_t; |
| |
| template <class INT> |
| class other_endian |
| { |
| private: |
| |
| INT value; |
| |
| |
| _eb91_u_int16_t change_endian(_eb91_u_int16_t x) |
| { |
| union { |
| _eb91_u_int16_t i; |
| _eb91_u_int8_t c[2]; |
| } val; |
| val.i = x; |
| std::swap(val.c[0], val.c[1]); |
| return val.i; |
| } |
| |
| _eb91_int16_t change_endian(_eb91_int16_t x) |
| { |
| union { |
| _eb91_int16_t i; |
| _eb91_int8_t c[2]; |
| } val; |
| val.i = x; |
| std::swap(val.c[0], val.c[1]); |
| return val.i; |
| } |
| public: |
| other_endian(const INT i = 0) |
| { |
| value = change_endian(i); |
| } |
| |
| operator INT() |
| { |
| return change_endian(value); |
| } |
| }; |
| |
| template <class INT> |
| class same_endian |
| { |
| INT value; |
| |
| public: |
| same_endian(const INT i = 0) |
| { |
| value = i; |
| } |
| |
| operator INT() |
| { |
| return value; |
| } |
| }; |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| int main() { |
| other_endian <_eb91_u_int16_t> little_endian_16_bit_int; |
| return 0; |
| } |