diff --git a/include/etl/algorithm.h b/include/etl/algorithm.h index 0a4348a2..63bfe13b 100644 --- a/include/etl/algorithm.h +++ b/include/etl/algorithm.h @@ -43,6 +43,7 @@ SOFTWARE. #include "exception.h" #include "functional.h" #include "gcd.h" +#include "initializer_list.h" #include "invoke.h" #include "iterator.h" #include "largest.h" @@ -7020,6 +7021,7 @@ namespace etl return etl::invoke(comp, etl::invoke(proj, b), etl::invoke(proj, a)) ? b : a; } + #if ETL_HAS_INITIALIZER_LIST template constexpr T operator()(std::initializer_list r, Comp comp = {}, Proj proj = {}) const { @@ -7036,6 +7038,7 @@ namespace etl } return *smallest; } + #endif template >> constexpr ranges::range_value_t operator()(R&& r, Comp comp = {}, Proj proj = {}) const @@ -7098,6 +7101,7 @@ namespace etl return etl::invoke(comp, etl::invoke(proj, a), etl::invoke(proj, b)) ? b : a; } + #if ETL_HAS_INITIALIZER_LIST template constexpr T operator()(std::initializer_list r, Comp comp = {}, Proj proj = {}) const { @@ -7114,6 +7118,7 @@ namespace etl } return *largest; } + #endif template >> constexpr ranges::range_value_t operator()(R&& r, Comp comp = {}, Proj proj = {}) const @@ -7180,6 +7185,7 @@ namespace etl return {a, b}; } + #if ETL_HAS_INITIALIZER_LIST template constexpr ranges::minmax_result operator()(std::initializer_list r, Comp comp = {}, Proj proj = {}) const { @@ -7202,6 +7208,7 @@ namespace etl } return {*smallest, *largest}; } + #endif template >> constexpr ranges::minmax_result> operator()(R&& r, Comp comp = {}, Proj proj = {}) const diff --git a/include/etl/iterator.h b/include/etl/iterator.h index fb62de80..8a09e7c0 100644 --- a/include/etl/iterator.h +++ b/include/etl/iterator.h @@ -1218,6 +1218,52 @@ namespace etl #define ETL_ARRAY_SIZE(a) sizeof(etl::array_size(a)) +#if ETL_NOT_USING_STL || ETL_CPP17_NOT_SUPPORTED + //************************************************************************** + /// Returns a pointer to the block of memory containing the elements of the + /// range. + ///\ingroup container + //************************************************************************** + template + ETL_CONSTEXPR typename TContainer::pointer data(TContainer& container) + { + return container.data(); + } + + //************************************************************************** + /// Returns a const_pointer to the block of memory containing the elements of + /// the range. + ///\ingroup container + //************************************************************************** + template + ETL_CONSTEXPR typename TContainer::const_pointer data(const TContainer& container) + { + return container.data(); + } + + ///************************************************************************** + /// Returns a pointer to the block of memory containing the elements of the + /// range. + ///\ingroup container + ///************************************************************************** + template + ETL_CONSTEXPR TValue* data(TValue (&a)[Array_Size]) + { + return a; + } + + ///************************************************************************** + /// Returns a const pointer to the block of memory containing the elements of + /// the range. + ///\ingroup container + ///************************************************************************** + template + ETL_CONSTEXPR const TValue* data(const TValue (&a)[Array_Size]) + { + return a; + } +#endif + #if ETL_USING_CPP17 template using iter_value_t = typename etl::iterator_traits>::value_type; @@ -1962,52 +2008,6 @@ namespace etl inline constexpr bool is_range_v = is_range::value; #endif #endif - -#if ETL_NOT_USING_STL || ETL_CPP17_NOT_SUPPORTED - //************************************************************************** - /// Returns a pointer to the block of memory containing the elements of the - /// range. - ///\ingroup container - //************************************************************************** - template - ETL_CONSTEXPR typename TContainer::pointer data(TContainer& container) - { - return container.data(); - } - - //************************************************************************** - /// Returns a const_pointer to the block of memory containing the elements of - /// the range. - ///\ingroup container - //************************************************************************** - template - ETL_CONSTEXPR typename TContainer::const_pointer data(const TContainer& container) - { - return container.data(); - } - - ///************************************************************************** - /// Returns a pointer to the block of memory containing the elements of the - /// range. - ///\ingroup container - ///************************************************************************** - template - ETL_CONSTEXPR TValue* data(TValue (&a)[Array_Size]) - { - return a; - } - - ///************************************************************************** - /// Returns a const pointer to the block of memory containing the elements of - /// the range. - ///\ingroup container - ///************************************************************************** - template - ETL_CONSTEXPR const TValue* data(const TValue (&a)[Array_Size]) - { - return a; - } -#endif } // namespace etl #endif diff --git a/test/test_algorithm.cpp b/test/test_algorithm.cpp index 26640d64..fa0f4f0e 100644 --- a/test/test_algorithm.cpp +++ b/test/test_algorithm.cpp @@ -16495,6 +16495,7 @@ namespace CHECK_EQUAL(3, etl::ranges::min(-5, 3, etl::ranges::less{}, abs_proj)); } + #if ETL_HAS_INITIALIZER_LIST //************************************************************************* TEST(ranges_min_initializer_list) { @@ -16517,6 +16518,7 @@ namespace }; CHECK_EQUAL(9, etl::ranges::min({3, 1, 4, 5, 9, 2, 6}, etl::ranges::less{}, negate)); } + #endif //************************************************************************* TEST(ranges_min_range) @@ -16692,6 +16694,7 @@ namespace CHECK_EQUAL(-5, etl::ranges::max(-5, 3, etl::ranges::less{}, abs_proj)); } + #if ETL_HAS_INITIALIZER_LIST //************************************************************************* TEST(ranges_max_initializer_list) { @@ -16714,6 +16717,7 @@ namespace }; CHECK_EQUAL(1, etl::ranges::max({3, 1, 4, 5, 9, 2, 6}, etl::ranges::less{}, negate)); } + #endif //************************************************************************* TEST(ranges_max_range) @@ -16914,6 +16918,7 @@ namespace CHECK_EQUAL(-5, result2.max); } + #if ETL_HAS_INITIALIZER_LIST //************************************************************************* TEST(ranges_minmax_initializer_list) { @@ -16945,6 +16950,7 @@ namespace CHECK_EQUAL(9, result.min); CHECK_EQUAL(1, result.max); } + #endif //************************************************************************* TEST(ranges_minmax_range)