From 418180181b5e4a0b913aab479f48458a55bb34c7 Mon Sep 17 00:00:00 2001 From: Joel Falcou Date: Sat, 26 Nov 2022 08:41:17 +0100 Subject: [PATCH 1/5] Simplify code around find_pattern --- .../detail/generic/find_optimized_shuffle_pattern.hpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/include/eve/module/core/detail/generic/find_optimized_shuffle_pattern.hpp b/include/eve/module/core/detail/generic/find_optimized_shuffle_pattern.hpp index de3dbc2db0..d658d2a56c 100644 --- a/include/eve/module/core/detail/generic/find_optimized_shuffle_pattern.hpp +++ b/include/eve/module/core/detail/generic/find_optimized_shuffle_pattern.hpp @@ -120,13 +120,13 @@ find_optimized_shuffle_pattern() { return bound {broadcast_group, st->first, st->second, sz}; } - else if constexpr( constexpr auto s = is_slide_left; s != 0 ) + else if constexpr(is_slide_left != 0 ) { - return bound {slide_left, index}; + return bound {slide_left, index>}; } - else if constexpr( constexpr auto s = is_slide_right; s != 0 ) + else if constexpr(is_slide_right != 0 ) { - return bound {slide_right, index}; + return bound {slide_right, index>}; } else if constexpr( is_reverse ) return bound {reverse}; else if constexpr( is_deinterleave_groups_shuffle != sz ) From af29d3d2025e53266ffd62e6ae6f1b4542928649 Mon Sep 17 00:00:00 2001 From: Joel Falcou Date: Sat, 26 Nov 2022 16:25:06 +0100 Subject: [PATCH 2/5] Fix very vocal warning --- test/unit/internals/compress/compress_mask_num.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unit/internals/compress/compress_mask_num.cpp b/test/unit/internals/compress/compress_mask_num.cpp index f8ffd222a3..fe2127f41f 100644 --- a/test/unit/internals/compress/compress_mask_num.cpp +++ b/test/unit/internals/compress/compress_mask_num.cpp @@ -41,7 +41,7 @@ TTS_CASE_TPL("compress_store_swizzle_mask_num 4 elements",eve::test::scalar::all auto [actual_num, actual_count] = eve::detail::compress_store_swizzle_mask_num(ignore, mask); TTS_EQUAL(expected_num, actual_num); - int expected_count = eve::count_true(mask_with_ignore); + std::ptrdiff_t expected_count = eve::count_true(mask_with_ignore); TTS_EQUAL(expected_count, actual_count); } } From 7c83a7ecfd3f5db7559a50ec7eb0dc02b6b50f65 Mon Sep 17 00:00:00 2001 From: Joel Falcou Date: Sat, 26 Nov 2022 16:28:14 +0100 Subject: [PATCH 3/5] Simplify value_type_t --- include/eve/traits/value_type.hpp | 68 ++++++++++++++++--------------- 1 file changed, 36 insertions(+), 32 deletions(-) diff --git a/include/eve/traits/value_type.hpp b/include/eve/traits/value_type.hpp index 5cb7dda44c..8b55991365 100644 --- a/include/eve/traits/value_type.hpp +++ b/include/eve/traits/value_type.hpp @@ -17,31 +17,33 @@ namespace eve { namespace detail { - template - constexpr auto value_type_impl() + template constexpr auto value_type_impl() { - if constexpr (range) - { - using ref = std::add_lvalue_reference_t; - return value_type_impl()))>(); - } - else if constexpr (std::input_or_output_iterator) - { - return std::type_identity::value_type>{}; - } - else if constexpr ( requires { typename T::value_type; } ) - { - return std::type_identity{}; - } - // Maybe this should be deleted - else if constexpr ( kumi::product_type ) + using ref = std::add_lvalue_reference_t; + return value_type_impl()))>(); + } + + template constexpr auto value_type_impl() + { + return std::type_identity::value_type>{}; + } + + // Maybe this should be deleted + template constexpr auto value_type_impl() + { + auto mapper = [](U) { - auto mapper = [](U) { - return typename decltype( value_type_impl() )::type{}; - }; + return typename decltype(value_type_impl())::type{}; + }; - return std::type_identity>{}; - } + return std::type_identity>{}; + } + + template + requires requires { typename T::value_type; } + constexpr auto value_type_impl() + { + return std::type_identity{}; } } @@ -54,19 +56,21 @@ namespace eve //! //! @brief A meta function for getting an associated value_type for a relaxed iterator/range. //! - //! If T has begin/end - value_type_t for return type of begin - //! If T is std::iterator -> returns iterator_traits::value_type - //! If T has nested `value_type` -> returns it - //! If T is a product type and all elements have value_type_t defined for them - - //! kumi::tuple for the individual product types. - //! Otherwise it's undefined. + //! value_type_t is computed as follows: + //! - If T has begin/end - value_type_t for return type of begin + //! - If T is std::iterator -> returns iterator_traits::value_type + //! - If T has nested `value_type` -> returns it + //! - If T is a product type and all elements have value_type_t defined for them - + //! - kumi::tuple for the individual product types. + //! - Otherwise it's undefined. + //! + //! @tparam T Type to process //! - //! **Required header:** `#include `, - //! `#include ` + //! **Required header:** `#include ` //! @} //================================================================================================ - template - requires (!value) + template + requires (!value) using value_type_t = typename decltype(detail::value_type_impl())::type; } From 5efe747e666bf31f51457694f985cdc45a8d7c4b Mon Sep 17 00:00:00 2001 From: Joel Falcou Date: Sat, 26 Nov 2022 16:28:42 +0100 Subject: [PATCH 4/5] unit.internals now compiles --- appveyor.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/appveyor.yml b/appveyor.yml index 8f2d42afd3..7448fc66cb 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -11,7 +11,9 @@ build_script: - cmake -G "Visual Studio 17 2022" -A x64 .. - cmake --build . --target unit.arch.exe --verbose --config Release - cmake --build . --target unit.meta.exe --verbose --config Release +- cmake --build . --target unit.internals.exe --verbose --config Release test_script: - ctest -C Release -VV -R ^unit.arch.*.exe - ctest -C Release -VV -R ^unit.meta.*.exe +- ctest -C Release -VV -R ^unit.internals.*.exe From 6b1393614f82348c36fcc4d292745d168318f889 Mon Sep 17 00:00:00 2001 From: Joel Falcou Date: Sat, 26 Nov 2022 16:32:03 +0100 Subject: [PATCH 5/5] Fix over-eager value_type fix --- include/eve/traits/value_type.hpp | 40 +++++++++++++++++-------------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/include/eve/traits/value_type.hpp b/include/eve/traits/value_type.hpp index 8b55991365..21d5e700e0 100644 --- a/include/eve/traits/value_type.hpp +++ b/include/eve/traits/value_type.hpp @@ -17,34 +17,38 @@ namespace eve { namespace detail { - template constexpr auto value_type_impl() - { - using ref = std::add_lvalue_reference_t; - return value_type_impl()))>(); - } - - template constexpr auto value_type_impl() + template + constexpr auto value_type_impl() { return std::type_identity::value_type>{}; } - // Maybe this should be deleted - template constexpr auto value_type_impl() + template + constexpr auto value_type_impl() { - auto mapper = [](U) + if constexpr ( requires { typename T::value_type; } ) + { + return std::type_identity{}; + } + // Maybe this should be deleted + else if constexpr ( kumi::product_type ) { - return typename decltype(value_type_impl())::type{}; - }; + auto mapper = [](U) + { + return typename decltype( value_type_impl() )::type{}; + }; - return std::type_identity>{}; + return std::type_identity>{}; + } } - template - requires requires { typename T::value_type; } + template constexpr auto value_type_impl() { - return std::type_identity{}; + using ref = std::add_lvalue_reference_t; + return value_type_impl()))>(); } + } //================================================================================================ @@ -70,7 +74,7 @@ namespace eve //! @} //================================================================================================ - template - requires (!value) + template + requires (!value) using value_type_t = typename decltype(detail::value_type_impl())::type; }