It's likely to be better at choosing the most efficient method than our CMake tests.
# Determine which kind of byte swap functions your compiler supports.
check_cxx_source_compiles("
+ #include <boost/endian/conversion.hpp>
int main() {
- __builtin_bswap16(0);
- __builtin_bswap32(0);
- __builtin_bswap64(0);
+ boost::endian::endian_reverse(static_cast<uint16_t>(1));
+ boost::endian::endian_reverse(static_cast<uint32_t>(1));
+ boost::endian::endian_reverse(static_cast<uint64_t>(1));
return 0;
}
-" HAVE_GCC_BYTESWAP)
+" HAVE_BOOST_BYTESWAP)
-if(NOT HAVE_GCC_BYTESWAP)
+if(NOT HAVE_BOOST_BYTESWAP)
check_cxx_source_compiles("
- #include <byteswap.h>
int main() {
- __bswap_16(0);
- __bswap_32(0);
- __bswap_64(0);
+ __builtin_bswap16(0);
+ __builtin_bswap32(0);
+ __builtin_bswap64(0);
return 0;
}
- " HAVE_GLIBC_BYTESWAP)
+ " HAVE_GCC_BYTESWAP)
- if(NOT HAVE_GLIBC_BYTESWAP)
+ if(NOT HAVE_GCC_BYTESWAP)
check_cxx_source_compiles("
- #include <stdlib.h>
+ #include <byteswap.h>
int main() {
- _byteswap_ushort(0);
- _byteswap_ulong(0);
- _byteswap_uint64(0);
+ __bswap_16(0);
+ __bswap_32(0);
+ __bswap_64(0);
return 0;
}
- " HAVE_MSC_BYTESWAP)
+ " HAVE_GLIBC_BYTESWAP)
- if(NOT HAVE_MSC_BYTESWAP)
+ if(NOT HAVE_GLIBC_BYTESWAP)
check_cxx_source_compiles("
- #include <libkern/OSByteOrder.h>
+ #include <stdlib.h>
int main() {
- OSSwapInt16(0);
- OSSwapInt32(0);
- OSSwapInt64(0);
+ _byteswap_ushort(0);
+ _byteswap_ulong(0);
+ _byteswap_uint64(0);
return 0;
}
- " HAVE_MAC_BYTESWAP)
+ " HAVE_MSC_BYTESWAP)
- if(NOT HAVE_MAC_BYTESWAP)
+ if(NOT HAVE_MSC_BYTESWAP)
check_cxx_source_compiles("
- #include <sys/endian.h>
+ #include <libkern/OSByteOrder.h>
int main() {
- swap16(0);
- swap32(0);
- swap64(0);
+ OSSwapInt16(0);
+ OSSwapInt32(0);
+ OSSwapInt64(0);
return 0;
}
- " HAVE_OPENBSD_BYTESWAP)
+ " HAVE_MAC_BYTESWAP)
+
+ if(NOT HAVE_MAC_BYTESWAP)
+ check_cxx_source_compiles("
+ #include <sys/endian.h>
+ int main() {
+ swap16(0);
+ swap32(0);
+ swap64(0);
+ return 0;
+ }
+ " HAVE_OPENBSD_BYTESWAP)
+ endif()
endif()
endif()
endif()
/* config.h. Generated by cmake from config.h.cmake */
/* Defined if your compiler supports some byte swap functions */
+#cmakedefine HAVE_BOOST_BYTESWAP 1
#cmakedefine HAVE_GCC_BYTESWAP 1
#cmakedefine HAVE_GLIBC_BYTESWAP 1
#cmakedefine HAVE_MSC_BYTESWAP 1
#ifndef DO_NOT_DOCUMENT // tell Doxygen not to document this header
#ifdef HAVE_CONFIG_H
-#include <config.h>
+# include <config.h>
#endif
-#if defined(HAVE_MSC_BYTESWAP)
+#if defined(HAVE_BOOST_BYTESWAP)
+# include <boost/endian/conversion.hpp>
+#elif defined(HAVE_MSC_BYTESWAP)
# include <stdlib.h>
#elif defined(HAVE_GLIBC_BYTESWAP)
# include <byteswap.h>
*/
inline ushort byteSwap(ushort x)
{
-#if defined(HAVE_GCC_BYTESWAP)
+#if defined(HAVE_BOOST_BYTESWAP)
+
+ return boost::endian::endian_reverse(x);
+
+#elif defined(HAVE_GCC_BYTESWAP)
return __builtin_bswap16(x);
*/
inline uint byteSwap(uint x)
{
-#if defined(HAVE_GCC_BYTESWAP)
+#if defined(HAVE_BOOST_BYTESWAP)
+
+ return boost::endian::endian_reverse(x);
+
+#elif defined(HAVE_GCC_BYTESWAP)
return __builtin_bswap32(x);
*/
inline ulonglong byteSwap(ulonglong x)
{
-#if defined(HAVE_GCC_BYTESWAP)
+#if defined(HAVE_BOOST_BYTESWAP)
+
+ return boost::endian::endian_reverse(x);
+
+#elif defined(HAVE_GCC_BYTESWAP)
return __builtin_bswap64(x);