diff --git a/include/boost/endian/conversion.hpp b/include/boost/endian/conversion.hpp index 4b570e4..20dc3d8 100644 --- a/include/boost/endian/conversion.hpp +++ b/include/boost/endian/conversion.hpp @@ -24,7 +24,15 @@ namespace boost namespace endian { #ifndef BOOST_ENDIAN_ORDER_ENUM_DEFINED - BOOST_SCOPED_ENUM_START(order) {big, little, native}; BOOST_SCOPED_ENUM_END + BOOST_SCOPED_ENUM_START(order) + { + big, little, +# ifdef BOOST_BIG_ENDIAN + native = big +# else + native = little +# endif + }; BOOST_SCOPED_ENUM_END # define BOOST_ENDIAN_ORDER_ENUM_DEFINED #endif @@ -330,23 +338,22 @@ namespace endian // Primary template and specializations to support convert_value(). See rationale in convert_value() below. template class value_converter ; // primary template - template class value_converter {public: T operator()(T x) BOOST_NOEXCEPT {return x;}}; +// template class value_converter {public: T operator()(T x) BOOST_NOEXCEPT {return x;}}; template class value_converter {public: T operator()(T x) BOOST_NOEXCEPT {return x;}}; template class value_converter {public: T operator()(T x) BOOST_NOEXCEPT {return x;}}; - template class value_converter {public: T operator()(T x) BOOST_NOEXCEPT {return reverse_value(x);}}; template class value_converter {public: T operator()(T x) BOOST_NOEXCEPT {return reverse_value(x);}}; -# ifdef BOOST_BIG_ENDIAN - template class value_converter {public: T operator()(T x) BOOST_NOEXCEPT {return return x;}}; - template class value_converter {public: T operator()(T x) BOOST_NOEXCEPT {return reverse_value(x);}}; - template class value_converter {public: T operator()(T x) BOOST_NOEXCEPT {return x;}; - template class value_converter {public: T operator()(T x) BOOST_NOEXCEPT {return reverse_value(x);}}; -# else // BOOST_LITTLE_ENDIAN - template class value_converter {public: T operator()(T x) BOOST_NOEXCEPT {return reverse_value(x);}}; - template class value_converter {public: T operator()(T x) BOOST_NOEXCEPT {return x;}}; - template class value_converter {public: T operator()(T x) BOOST_NOEXCEPT {return reverse_value(x);}}; - template class value_converter {public: T operator()(T x) BOOST_NOEXCEPT {return x;}}; -# endif +//# ifdef BOOST_BIG_ENDIAN +// template class value_converter {public: T operator()(T x) BOOST_NOEXCEPT {return return x;}}; +// template class value_converter {public: T operator()(T x) BOOST_NOEXCEPT {return reverse_value(x);}}; +// template class value_converter {public: T operator()(T x) BOOST_NOEXCEPT {return x;}; +// template class value_converter {public: T operator()(T x) BOOST_NOEXCEPT {return reverse_value(x);}}; +//# else // BOOST_LITTLE_ENDIAN +// template class value_converter {public: T operator()(T x) BOOST_NOEXCEPT {return reverse_value(x);}}; +// template class value_converter {public: T operator()(T x) BOOST_NOEXCEPT {return x;}}; +// template class value_converter {public: T operator()(T x) BOOST_NOEXCEPT {return reverse_value(x);}}; +// template class value_converter {public: T operator()(T x) BOOST_NOEXCEPT {return x;}}; +//# endif } // compile-time generic convert return by value @@ -413,23 +420,22 @@ namespace endian // Primary template and specializations to support convert(). See rationale in convert() below. template class converter; // primary template - template class converter {public: void operator()(T&) BOOST_NOEXCEPT {/*no effect*/}}; + // template class converter {public: void operator()(T&) BOOST_NOEXCEPT {/*no effect*/}}; template class converter {public: void operator()(T&) BOOST_NOEXCEPT {/*no effect*/}}; template class converter {public: void operator()(T&) BOOST_NOEXCEPT {/*no effect*/}}; - template class converter {public: void operator()(T& x) BOOST_NOEXCEPT {reverse(x);}}; template class converter {public: void operator()(T& x) BOOST_NOEXCEPT {reverse(x);}}; -# ifdef BOOST_BIG_ENDIAN - template class converter {public: void operator()(T&) BOOST_NOEXCEPT {/*no effect*/}}; - template class converter {public: void operator()(T& x) BOOST_NOEXCEPT {reverse(x);}}; - template class converter {public: void operator()(T&) BOOST_NOEXCEPT {/*no effect*/}}; - template class converter {public: void operator()(T& x) BOOST_NOEXCEPT {reverse(x);}}; -# else // BOOST_LITTLE_ENDIAN - template class converter {public: void operator()(T& x) BOOST_NOEXCEPT {reverse(x);}}; - template class converter {public: void operator()(T&) BOOST_NOEXCEPT {/*no effect*/}}; - template class converter {public: void operator()(T& x) BOOST_NOEXCEPT {reverse(x);}}; - template class converter {public: void operator()(T&) BOOST_NOEXCEPT {/*no effect*/}}; -# endif +//# ifdef BOOST_BIG_ENDIAN +// template class converter {public: void operator()(T&) BOOST_NOEXCEPT {/*no effect*/}}; +// template class converter {public: void operator()(T& x) BOOST_NOEXCEPT {reverse(x);}}; +// template class converter {public: void operator()(T&) BOOST_NOEXCEPT {/*no effect*/}}; +// template class converter {public: void operator()(T& x) BOOST_NOEXCEPT {reverse(x);}}; +//# else // BOOST_LITTLE_ENDIAN +// template class converter {public: void operator()(T& x) BOOST_NOEXCEPT {reverse(x);}}; +// template class converter {public: void operator()(T&) BOOST_NOEXCEPT {/*no effect*/}}; +// template class converter {public: void operator()(T& x) BOOST_NOEXCEPT {reverse(x);}}; +// template class converter {public: void operator()(T&) BOOST_NOEXCEPT {/*no effect*/}}; +//# endif } // compile-time generic byte-order convert in place diff --git a/include/boost/endian/types.hpp b/include/boost/endian/types.hpp index 95aa191..d640dea 100644 --- a/include/boost/endian/types.hpp +++ b/include/boost/endian/types.hpp @@ -77,7 +77,15 @@ namespace endian { #ifndef BOOST_ENDIAN_ORDER_ENUM_DEFINED - BOOST_SCOPED_ENUM_START(order) {big, little, native}; BOOST_SCOPED_ENUM_END + BOOST_SCOPED_ENUM_START(order) + { + big, little, +# ifdef BOOST_BIG_ENDIAN + native = big +# else + native = little +# endif + }; BOOST_SCOPED_ENUM_END # define BOOST_ENDIAN_ORDER_ENUM_DEFINED #endif BOOST_SCOPED_ENUM_START(align) {no, yes}; BOOST_SCOPED_ENUM_END