From c75617c2b62e7c235ec8cee760c5904925b22525 Mon Sep 17 00:00:00 2001 From: John Wellbelove Date: Mon, 18 Dec 2023 11:07:42 +0000 Subject: [PATCH] #805 legacy etl::bitset set/reset does not work if the element type is greater than 8 bit --- include/etl/private/bitset_legacy.h | 18 ++++++++--------- include/etl/private/bitset_new.h | 8 ++++---- test/vs2022/etl.vcxproj.filters | 30 +++++++++++++++++++++++------ 3 files changed, 37 insertions(+), 19 deletions(-) diff --git a/include/etl/private/bitset_legacy.h b/include/etl/private/bitset_legacy.h index 30c152ae1..2a37a6a3a 100644 --- a/include/etl/private/bitset_legacy.h +++ b/include/etl/private/bitset_legacy.h @@ -151,10 +151,10 @@ namespace etl typedef typename etl::make_unsigned::type element_type; typedef element_type element_t; // Backward compatibility - static ETL_CONSTANT element_type ALL_SET = etl::integral_limits::max; + static ETL_CONSTANT element_type ALL_SET = etl::integral_limits::max; static ETL_CONSTANT element_type ALL_CLEAR = 0; - static ETL_CONSTANT size_t Bits_Per_Element = etl::integral_limits::bits; + static ETL_CONSTANT size_t Bits_Per_Element = etl::integral_limits::bits; #if ETL_USING_CPP11 typedef etl::span span_type; @@ -311,7 +311,7 @@ namespace etl //************************************************************************* ibitset& set() { - ::memset(pdata, 0xFF, Number_Of_Elements); + etl::fill_n(pdata, Number_Of_Elements - 1U, ALL_SET); pdata[Number_Of_Elements - 1U] = Top_Mask; return *this; @@ -519,7 +519,7 @@ namespace etl return v; } - //************************************************************************* + //************************************************************************* /// Put to a unsigned long. //************************************************************************* unsigned long to_ulong() const @@ -540,7 +540,7 @@ namespace etl //************************************************************************* ibitset& reset() { - ::memset(pdata, 0, Number_Of_Elements * sizeof(element_type)); + etl::fill_n(pdata, Number_Of_Elements, ALL_CLEAR); return *this; } @@ -582,10 +582,10 @@ namespace etl //************************************************************************* ibitset& flip() { - for (size_t i = 0UL; i < Number_Of_Elements; ++i) - { - pdata[i] = ~pdata[i]; - } + etl::transform_n(pdata, + Number_Of_Elements, + pdata, + etl::binary_not()); clear_unused_bits_in_msb(); diff --git a/include/etl/private/bitset_new.h b/include/etl/private/bitset_new.h index 28497238e..2887c97d9 100644 --- a/include/etl/private/bitset_new.h +++ b/include/etl/private/bitset_new.h @@ -440,10 +440,10 @@ namespace etl //************************************************************************* ETL_CONSTEXPR14 void flip(pointer pbuffer, size_t number_of_elements) ETL_NOEXCEPT { - for (size_t i = 0UL; i < number_of_elements; ++i) - { - pbuffer[i] = ~pbuffer[i]; - } + etl::transform_n(pbuffer, + number_of_elements, + pbuffer, + etl::binary_not()); } //************************************************************************* diff --git a/test/vs2022/etl.vcxproj.filters b/test/vs2022/etl.vcxproj.filters index 2adfa8622..5c457a213 100644 --- a/test/vs2022/etl.vcxproj.filters +++ b/test/vs2022/etl.vcxproj.filters @@ -3340,12 +3340,6 @@ Resource Files\CI\Appveyor - - Resource Files\CI\Github - - - Resource Files\CI\Github - Resource Files @@ -3412,6 +3406,30 @@ Tests\Scripts + + Resource Files\CI\Github + + + Resource Files\CI\Github + + + Resource Files\CI\Github + + + Resource Files\CI\Github + + + Resource Files\CI\Github + + + Resource Files\CI\Github + + + Resource Files\CI\Github + + + Resource Files\CI\Github +