From 6af16cc3395e7860e8e81f3c1493eb2d677f9b97 Mon Sep 17 00:00:00 2001 From: Beman Date: Fri, 10 May 2013 17:51:58 -0400 Subject: [PATCH] compile-time convert_bytes working, all signed and unsigned integer cases being tested. --- include/boost/endian/converters.hpp | 66 +++++++++++++++++------------ test/converter_test.cpp | 61 +++++++++++++++++++++++++- 2 files changed, 98 insertions(+), 29 deletions(-) diff --git a/include/boost/endian/converters.hpp b/include/boost/endian/converters.hpp index 5c6a677..3c79ea3 100644 --- a/include/boost/endian/converters.hpp +++ b/include/boost/endian/converters.hpp @@ -190,59 +190,69 @@ namespace endian template<> inline int16_t convert_bytes(int16_t x) BOOST_NOEXCEPT {return x;} template<> inline int16_t convert_bytes(int16_t x) BOOST_NOEXCEPT {return x;} - template<> inline int16_t convert_bytes(int16_t x) BOOST_NOEXCEPT {return x;} + template<> inline int16_t convert_bytes(int16_t x) BOOST_NOEXCEPT {return x;} + template<> inline uint16_t convert_bytes(uint16_t x) BOOST_NOEXCEPT {return x;} template<> inline uint16_t convert_bytes(uint16_t x) BOOST_NOEXCEPT {return x;} - template<> inline uint16_t convert_bytes(uint16_t x) BOOST_NOEXCEPT {return x;} + template<> inline uint16_t convert_bytes(uint16_t x) BOOST_NOEXCEPT {return x;} + template<> inline int32_t convert_bytes(int32_t x) BOOST_NOEXCEPT {return x;} template<> inline int32_t convert_bytes(int32_t x) BOOST_NOEXCEPT {return x;} - template<> inline int32_t convert_bytes(int32_t x) BOOST_NOEXCEPT {return x;} + template<> inline int32_t convert_bytes(int32_t x) BOOST_NOEXCEPT {return x;} + template<> inline uint32_t convert_bytes(uint32_t x) BOOST_NOEXCEPT {return x;} template<> inline uint32_t convert_bytes(uint32_t x) BOOST_NOEXCEPT {return x;} template<> inline uint32_t convert_bytes(uint32_t x) BOOST_NOEXCEPT {return x;} + template<> inline int64_t convert_bytes(int64_t x) BOOST_NOEXCEPT {return x;} template<> inline int64_t convert_bytes(int64_t x) BOOST_NOEXCEPT {return x;} - template<> inline int64_t convert_bytes(int64_t x) BOOST_NOEXCEPT {return x;} + template<> inline int64_t convert_bytes(int64_t x) BOOST_NOEXCEPT {return x;} + template<> inline uint64_t convert_bytes(uint64_t x) BOOST_NOEXCEPT {return x;} template<> inline uint64_t convert_bytes(uint64_t x) BOOST_NOEXCEPT {return x;} template<> inline uint64_t convert_bytes(uint64_t x) BOOST_NOEXCEPT {return x;} template<> inline int16_t convert_bytes(int16_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} - template<> inline int16_t convert_bytes(int16_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} + template<> inline int16_t convert_bytes(int16_t x) BOOST_NOEXCEPT {return big(x);} template<> inline int16_t convert_bytes(int16_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} - template<> inline int16_t convert_bytes(int16_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} - template<> inline int16_t convert_bytes(int16_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} - template<> inline int16_t convert_bytes(int16_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} + template<> inline int16_t convert_bytes(int16_t x) BOOST_NOEXCEPT {return little(x);} + template<> inline int16_t convert_bytes(int16_t x) BOOST_NOEXCEPT {return big(x);} + template<> inline int16_t convert_bytes(int16_t x) BOOST_NOEXCEPT {return little(x);} + template<> inline uint16_t convert_bytes(uint16_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} - template<> inline uint16_t convert_bytes(uint16_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} + template<> inline uint16_t convert_bytes(uint16_t x) BOOST_NOEXCEPT {return big(x);} template<> inline uint16_t convert_bytes(uint16_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} - template<> inline uint16_t convert_bytes(uint16_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} - template<> inline uint16_t convert_bytes(uint16_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} - template<> inline uint16_t convert_bytes(uint16_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} + template<> inline uint16_t convert_bytes(uint16_t x) BOOST_NOEXCEPT {return little(x);} + template<> inline uint16_t convert_bytes(uint16_t x) BOOST_NOEXCEPT {return big(x);} + template<> inline uint16_t convert_bytes(uint16_t x) BOOST_NOEXCEPT {return little(x);} + template<> inline int32_t convert_bytes(int32_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} - template<> inline int32_t convert_bytes(int32_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} + template<> inline int32_t convert_bytes(int32_t x) BOOST_NOEXCEPT {return big(x);} template<> inline int32_t convert_bytes(int32_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} - template<> inline int32_t convert_bytes(int32_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} - template<> inline int32_t convert_bytes(int32_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} - template<> inline int32_t convert_bytes(int32_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} + template<> inline int32_t convert_bytes(int32_t x) BOOST_NOEXCEPT {return little(x);} + template<> inline int32_t convert_bytes(int32_t x) BOOST_NOEXCEPT {return big(x);} + template<> inline int32_t convert_bytes(int32_t x) BOOST_NOEXCEPT {return little(x);} + template<> inline uint32_t convert_bytes(uint32_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} - template<> inline uint32_t convert_bytes(uint32_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} + template<> inline uint32_t convert_bytes(uint32_t x) BOOST_NOEXCEPT {return big(x);} template<> inline uint32_t convert_bytes(uint32_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} - template<> inline uint32_t convert_bytes(uint32_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} - template<> inline uint32_t convert_bytes(uint32_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} - template<> inline uint32_t convert_bytes(uint32_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} + template<> inline uint32_t convert_bytes(uint32_t x) BOOST_NOEXCEPT {return little(x);} + template<> inline uint32_t convert_bytes(uint32_t x) BOOST_NOEXCEPT {return big(x);} + template<> inline uint32_t convert_bytes(uint32_t x) BOOST_NOEXCEPT {return little(x);} + template<> inline int64_t convert_bytes(int64_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} - template<> inline int64_t convert_bytes(int64_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} + template<> inline int64_t convert_bytes(int64_t x) BOOST_NOEXCEPT {return big(x);} template<> inline int64_t convert_bytes(int64_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} - template<> inline int64_t convert_bytes(int64_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} - template<> inline int64_t convert_bytes(int64_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} - template<> inline int64_t convert_bytes(int64_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} + template<> inline int64_t convert_bytes(int64_t x) BOOST_NOEXCEPT {return little(x);} + template<> inline int64_t convert_bytes(int64_t x) BOOST_NOEXCEPT {return big(x);} + template<> inline int64_t convert_bytes(int64_t x) BOOST_NOEXCEPT {return little(x);} + template<> inline uint64_t convert_bytes(uint64_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} - template<> inline uint64_t convert_bytes(uint64_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} + template<> inline uint64_t convert_bytes(uint64_t x) BOOST_NOEXCEPT {return big(x);} template<> inline uint64_t convert_bytes(uint64_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} - template<> inline uint64_t convert_bytes(uint64_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} - template<> inline uint64_t convert_bytes(uint64_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} - template<> inline uint64_t convert_bytes(uint64_t x) BOOST_NOEXCEPT {return reverse_bytes(x);} + template<> inline uint64_t convert_bytes(uint64_t x) BOOST_NOEXCEPT {return little(x);} + template<> inline uint64_t convert_bytes(uint64_t x) BOOST_NOEXCEPT {return big(x);} + template<> inline uint64_t convert_bytes(uint64_t x) BOOST_NOEXCEPT {return little(x);} inline BOOST_SCOPED_ENUM(order) actual_order(BOOST_SCOPED_ENUM(order) o) BOOST_NOEXCEPT { diff --git a/test/converter_test.cpp b/test/converter_test.cpp index af53bc6..a27aaa2 100644 --- a/test/converter_test.cpp +++ b/test/converter_test.cpp @@ -155,7 +155,66 @@ namespace { std::cout << "test_compile_time_convert_bytes...\n"; + BOOST_TEST_EQ((be::convert_bytes(bi16)), bi16); + BOOST_TEST_EQ((be::convert_bytes(li16)), li16); + BOOST_TEST_EQ((be::convert_bytes(ni16)), ni16); + BOOST_TEST_EQ((be::convert_bytes(bui16)), bui16); + BOOST_TEST_EQ((be::convert_bytes(lui16)), lui16); + BOOST_TEST_EQ((be::convert_bytes(nui16)), nui16); + BOOST_TEST_EQ((be::convert_bytes(bi32)), bi32); + BOOST_TEST_EQ((be::convert_bytes(li32)), li32); + BOOST_TEST_EQ((be::convert_bytes(ni32)), ni32); + BOOST_TEST_EQ((be::convert_bytes(bui32)), bui32); + BOOST_TEST_EQ((be::convert_bytes(lui32)), lui32); + BOOST_TEST_EQ((be::convert_bytes(nui32)), nui32); + BOOST_TEST_EQ((be::convert_bytes(bi64)), bi64); + BOOST_TEST_EQ((be::convert_bytes(li64)), li64); + BOOST_TEST_EQ((be::convert_bytes(ni64)), ni64); + BOOST_TEST_EQ((be::convert_bytes(bui64)), bui64); + BOOST_TEST_EQ((be::convert_bytes(lui64)), lui64); + BOOST_TEST_EQ((be::convert_bytes(nui64)), nui64); + + BOOST_TEST_EQ((be::convert_bytes(bi16)), li16); + BOOST_TEST_EQ((be::convert_bytes(bi16)), ni16); + BOOST_TEST_EQ((be::convert_bytes(li16)), bi16); + BOOST_TEST_EQ((be::convert_bytes(li16)), ni16); + BOOST_TEST_EQ((be::convert_bytes(ni16)), bi16); + BOOST_TEST_EQ((be::convert_bytes(ni16)), ni16); + + BOOST_TEST_EQ((be::convert_bytes(bui16)), lui16); + BOOST_TEST_EQ((be::convert_bytes(bui16)), nui16); + BOOST_TEST_EQ((be::convert_bytes(lui16)), bui16); + BOOST_TEST_EQ((be::convert_bytes(lui16)), nui16); + BOOST_TEST_EQ((be::convert_bytes(nui16)), bui16); + BOOST_TEST_EQ((be::convert_bytes(nui16)), nui16); + BOOST_TEST_EQ((be::convert_bytes(bi32)), li32); + BOOST_TEST_EQ((be::convert_bytes(bi32)), ni32); + BOOST_TEST_EQ((be::convert_bytes(li32)), bi32); + BOOST_TEST_EQ((be::convert_bytes(li32)), ni32); + BOOST_TEST_EQ((be::convert_bytes(ni32)), bi32); + BOOST_TEST_EQ((be::convert_bytes(ni32)), ni32); + + BOOST_TEST_EQ((be::convert_bytes(bui32)), lui32); + BOOST_TEST_EQ((be::convert_bytes(bui32)), nui32); + BOOST_TEST_EQ((be::convert_bytes(lui32)), bui32); + BOOST_TEST_EQ((be::convert_bytes(lui32)), nui32); + BOOST_TEST_EQ((be::convert_bytes(nui32)), bui32); + BOOST_TEST_EQ((be::convert_bytes(nui32)), nui32); + + BOOST_TEST_EQ((be::convert_bytes(bi64)), li64); + BOOST_TEST_EQ((be::convert_bytes(bi64)), ni64); + BOOST_TEST_EQ((be::convert_bytes(li64)), bi64); + BOOST_TEST_EQ((be::convert_bytes(li64)), ni64); + BOOST_TEST_EQ((be::convert_bytes(ni64)), bi64); + BOOST_TEST_EQ((be::convert_bytes(ni64)), ni64); + + BOOST_TEST_EQ((be::convert_bytes(bui64)), lui64); + BOOST_TEST_EQ((be::convert_bytes(bui64)), nui64); + BOOST_TEST_EQ((be::convert_bytes(lui64)), bui64); + BOOST_TEST_EQ((be::convert_bytes(lui64)), nui64); + BOOST_TEST_EQ((be::convert_bytes(nui64)), bui64); + BOOST_TEST_EQ((be::convert_bytes(nui64)), nui64); std::cout << " test_compile_time_convert_bytes complete\n"; } @@ -170,7 +229,7 @@ namespace int cpp_main(int, char * []) { - std::cerr << std::hex; + //std::cerr << std::hex; test_reverse_bytes(); test_conditional_reverse_bytes(); test_compile_time_convert_bytes();