diff --git a/include/etl/unaligned_type.h b/include/etl/unaligned_type.h index dd83ca6f..d884c4e4 100644 --- a/include/etl/unaligned_type.h +++ b/include/etl/unaligned_type.h @@ -231,8 +231,13 @@ namespace etl typedef T value_type; - typedef typename private_unaligned_type::unaligned_type_common::pointer pointer; - typedef typename private_unaligned_type::unaligned_type_common::const_pointer const_pointer; + typedef typename private_unaligned_type::unaligned_type_common::storage_type storage_type; + typedef typename private_unaligned_type::unaligned_type_common::pointer pointer; + typedef typename private_unaligned_type::unaligned_type_common::const_pointer const_pointer; + typedef typename private_unaligned_type::unaligned_type_common::iterator iterator; + typedef typename private_unaligned_type::unaligned_type_common::const_iterator const_iterator; + typedef typename private_unaligned_type::unaligned_type_common::reverse_iterator reverse_iterator; + typedef typename private_unaligned_type::unaligned_type_common::const_reverse_iterator const_reverse_iterator; static ETL_CONSTANT int Endian = Endian_; static ETL_CONSTANT size_t Size = private_unaligned_type::unaligned_type_common::Size; @@ -363,7 +368,8 @@ namespace etl struct unaligned_copy; //******************************************* - // Size == 1 + /// Unaligned copy + /// Size == 1 //******************************************* template struct unaligned_copy @@ -388,7 +394,8 @@ namespace etl }; //******************************************* - // Size == 2 + /// Unaligned copy + /// Size == 2 //******************************************* template struct unaligned_copy @@ -440,7 +447,8 @@ namespace etl }; //******************************************* - // Size == 4 + /// Unaligned copy + /// Size == 4 //******************************************* template struct unaligned_copy @@ -503,7 +511,8 @@ namespace etl }; //******************************************* - // Size == 8 + /// Unaligned copy + /// Size == 8 //******************************************* template struct unaligned_copy diff --git a/test/test_unaligned_type.cpp b/test/test_unaligned_type.cpp index 0bfe70d0..26b41697 100644 --- a/test/test_unaligned_type.cpp +++ b/test/test_unaligned_type.cpp @@ -760,5 +760,23 @@ namespace CHECK_EQUAL(0x1234, test_le.value()); CHECK_EQUAL(0x1234, test_be.value()); } + + //************************************************************************* + TEST(test_storage_bytes) + { + etl::le_uint16_t test_le(0x1234); + etl::be_uint16_t test_be(0x1234); + + int lev0 = test_le[0]; + int lev1 = test_le[1]; + + int bev0 = test_be[0]; + int bev1 = test_be[1]; + + CHECK_EQUAL(0x34, lev0); + CHECK_EQUAL(0x12, lev1); + CHECK_EQUAL(0x12, bev0); + CHECK_EQUAL(0x34, bev1); + } }; } diff --git a/test/test_unaligned_type_constexpr.cpp b/test/test_unaligned_type_constexpr.cpp index e77ad269..ddf65fa1 100644 --- a/test/test_unaligned_type_constexpr.cpp +++ b/test/test_unaligned_type_constexpr.cpp @@ -544,8 +544,8 @@ namespace { static constexpr etl::be_uint16_t test(0x1234); - constexpr const char* p1 = test.data(); - constexpr const char* p2 = test.data() + 1U; + constexpr etl::be_uint16_t::const_pointer p1 = test.data(); + constexpr etl::be_uint16_t::const_pointer p2 = test.data() + 1U; CHECK_EQUAL(0x12, *p1); CHECK_EQUAL(0x34, *p2); @@ -618,5 +618,23 @@ namespace CHECK_EQUAL(0x1234, lev); CHECK_EQUAL(0x1234, bev); } + + //************************************************************************* + TEST(test_storage_bytes) + { + constexpr etl::le_uint16_t test_le(0x1234); + constexpr etl::be_uint16_t test_be(0x1234); + + constexpr int lev0 = test_le[0]; + constexpr int lev1 = test_le[1]; + + constexpr int bev0 = test_be[0]; + constexpr int bev1 = test_be[1]; + + CHECK_EQUAL(0x34, lev0); + CHECK_EQUAL(0x12, lev1); + CHECK_EQUAL(0x12, bev0); + CHECK_EQUAL(0x34, bev1); + } }; }