#include <boost/type_traits/is_integral.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/type_traits/integral_constant.hpp>
-#include <boost/predef/other/endian.h>
#include <boost/static_assert.hpp>
#include <boost/cstdint.hpp>
#include <boost/config.hpp>
// reverse byte order
// requires T to be a non-bool integral type
// in detail/endian_reverse.hpp
- template<class T> inline BOOST_CONSTEXPR T endian_reverse( T x ) BOOST_NOEXCEPT;
+ //
+ // template<class T> inline BOOST_CONSTEXPR T endian_reverse( T x ) BOOST_NOEXCEPT;
// reverse byte order unless native endianness is big
template <class EndianReversible >
// reverse in place
// in detail/endian_reverse.hpp
- template <class EndianReversible>
- inline void endian_reverse_inplace(EndianReversible& x) BOOST_NOEXCEPT;
- // Effects: x = endian_reverse(x)
+ //
+ // template <class EndianReversible>
+ // inline void endian_reverse_inplace(EndianReversible& x) BOOST_NOEXCEPT;
+ //
+ // Effects: x = endian_reverse(x)
// reverse in place unless native endianness is big
template <class EndianReversibleInplace>
template <class EndianReversible>
inline BOOST_CONSTEXPR EndianReversible big_to_native( EndianReversible x ) BOOST_NOEXCEPT
{
- BOOST_STATIC_ASSERT( detail::is_endian_reversible<EndianReversible>::value );
-
-#if BOOST_ENDIAN_BIG_BYTE
-
- return x;
-
-#else
-
- return endian_reverse(x);
-
-#endif
- }
+ return boost::endian::conditional_reverse<order::big, order::native>( x );
+}
template <class EndianReversible>
inline BOOST_CONSTEXPR EndianReversible native_to_big( EndianReversible x ) BOOST_NOEXCEPT
{
- BOOST_STATIC_ASSERT( detail::is_endian_reversible<EndianReversible>::value );
-
-#if BOOST_ENDIAN_BIG_BYTE
-
- return x;
-
-#else
-
- return endian_reverse(x);
-
-#endif
+ return boost::endian::conditional_reverse<order::native, order::big>( x );
}
template <class EndianReversible>
inline BOOST_CONSTEXPR EndianReversible little_to_native( EndianReversible x ) BOOST_NOEXCEPT
{
- BOOST_STATIC_ASSERT( detail::is_endian_reversible<EndianReversible>::value );
-
-#if BOOST_ENDIAN_LITTLE_BYTE
-
- return x;
-
-#else
-
- return endian_reverse(x);
-
-#endif
+ return boost::endian::conditional_reverse<order::little, order::native>( x );
}
template <class EndianReversible>
inline BOOST_CONSTEXPR EndianReversible native_to_little( EndianReversible x ) BOOST_NOEXCEPT
{
- BOOST_STATIC_ASSERT( detail::is_endian_reversible<EndianReversible>::value );
-
-#if BOOST_ENDIAN_LITTLE_BYTE
-
- return x;
-
-#else
-
- return endian_reverse(x);
-
-#endif
+ return boost::endian::conditional_reverse<order::native, order::little>( x );
}
namespace detail
} // namespace detail
-#if BOOST_ENDIAN_BIG_BYTE
-
-template <class EndianReversibleInplace>
-inline void big_to_native_inplace( EndianReversibleInplace& ) BOOST_NOEXCEPT
-{
- BOOST_STATIC_ASSERT( detail::is_endian_reversible_inplace<EndianReversibleInplace>::value );
-}
-
-#else
-
template <class EndianReversibleInplace>
inline void big_to_native_inplace( EndianReversibleInplace& x ) BOOST_NOEXCEPT
{
- BOOST_STATIC_ASSERT( detail::is_endian_reversible_inplace<EndianReversibleInplace>::value );
- endian_reverse_inplace( x );
+ boost::endian::conditional_reverse_inplace<order::big, order::native>( x );
}
-#endif
-
-#if BOOST_ENDIAN_BIG_BYTE
-
-template <class EndianReversibleInplace>
-inline void native_to_big_inplace( EndianReversibleInplace& ) BOOST_NOEXCEPT
-{
- BOOST_STATIC_ASSERT( detail::is_endian_reversible_inplace<EndianReversibleInplace>::value );
-}
-
-#else
-
template <class EndianReversibleInplace>
inline void native_to_big_inplace( EndianReversibleInplace& x ) BOOST_NOEXCEPT
{
- BOOST_STATIC_ASSERT( detail::is_endian_reversible_inplace<EndianReversibleInplace>::value );
- endian_reverse_inplace( x );
-}
-
-#endif
-
-#if BOOST_ENDIAN_LITTLE_BYTE
-
-template <class EndianReversibleInplace>
-inline void little_to_native_inplace( EndianReversibleInplace& ) BOOST_NOEXCEPT
-{
- BOOST_STATIC_ASSERT( detail::is_endian_reversible_inplace<EndianReversibleInplace>::value );
+ boost::endian::conditional_reverse_inplace<order::native, order::big>( x );
}
-#else
-
template <class EndianReversibleInplace>
inline void little_to_native_inplace( EndianReversibleInplace& x ) BOOST_NOEXCEPT
{
- BOOST_STATIC_ASSERT( detail::is_endian_reversible_inplace<EndianReversibleInplace>::value );
- endian_reverse_inplace( x );
+ boost::endian::conditional_reverse_inplace<order::little, order::native>( x );
}
-#endif
-
-#if BOOST_ENDIAN_LITTLE_BYTE
-
-template <class EndianReversibleInplace>
-inline void native_to_little_inplace( EndianReversibleInplace& ) BOOST_NOEXCEPT
-{
- BOOST_STATIC_ASSERT( detail::is_endian_reversible_inplace<EndianReversibleInplace>::value );
-}
-
-#else
-
template <class EndianReversibleInplace>
inline void native_to_little_inplace( EndianReversibleInplace& x ) BOOST_NOEXCEPT
{
- BOOST_STATIC_ASSERT( detail::is_endian_reversible_inplace<EndianReversibleInplace>::value );
- endian_reverse_inplace( x );
+ boost::endian::conditional_reverse_inplace<order::native, order::little>( x );
}
-#endif
-
namespace detail
{