From faf8da3c8da275c104330ef2743c5a062bea2f4b Mon Sep 17 00:00:00 2001 From: MacroFake Date: Fri, 19 Aug 2022 19:44:03 +0200 Subject: Remove Join() helper only used in tests Also remove redundant return type that can be deduced by the compiler. --- src/test/util_tests.cpp | 6 +++--- src/util/string.h | 7 ------- 2 files changed, 3 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/test/util_tests.cpp b/src/test/util_tests.cpp index 70e2f89e0b..a16280f8c6 100644 --- a/src/test/util_tests.cpp +++ b/src/test/util_tests.cpp @@ -238,9 +238,9 @@ BOOST_AUTO_TEST_CASE(span_write_bytes) BOOST_AUTO_TEST_CASE(util_Join) { // Normal version - BOOST_CHECK_EQUAL(Join({}, ", "), ""); - BOOST_CHECK_EQUAL(Join({"foo"}, ", "), "foo"); - BOOST_CHECK_EQUAL(Join({"foo", "bar"}, ", "), "foo, bar"); + BOOST_CHECK_EQUAL(Join(std::vector{}, ", "), ""); + BOOST_CHECK_EQUAL(Join(std::vector{"foo"}, ", "), "foo"); + BOOST_CHECK_EQUAL(Join(std::vector{"foo", "bar"}, ", "), "foo, bar"); // Version with unary operator const auto op_upper = [](const std::string& s) { return ToUpper(s); }; diff --git a/src/util/string.h b/src/util/string.h index dd4de888bb..f8d36493b8 100644 --- a/src/util/string.h +++ b/src/util/string.h @@ -66,7 +66,6 @@ void ReplaceAll(std::string& in_out, const std::string& search, const std::strin */ template auto Join(const std::vector& list, const BaseType& separator, UnaryOp unary_op) - -> decltype(unary_op(list.at(0))) { decltype(unary_op(list.at(0))) ret; for (size_t i = 0; i < list.size(); ++i) { @@ -82,12 +81,6 @@ T Join(const std::vector& list, const T2& separator) return Join(list, separator, [](const T& i) { return i; }); } -// Explicit overload needed for c_str arguments, which would otherwise cause a substitution failure in the template above. -inline std::string Join(const std::vector& list, std::string_view separator) -{ - return Join(list, separator); -} - /** * Create an unordered multi-line list of items. */ -- cgit v1.2.3 From fa1c71695593d5d3b264c2504baca318fc46d580 Mon Sep 17 00:00:00 2001 From: MacroFake Date: Fri, 19 Aug 2022 19:28:22 +0200 Subject: Make Join() util work with any container type Also, remove helper that is only used in tests. --- src/test/util_tests.cpp | 6 +++--- src/util/string.h | 29 ++++++++++++++++------------- 2 files changed, 19 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/test/util_tests.cpp b/src/test/util_tests.cpp index a16280f8c6..921cd37327 100644 --- a/src/test/util_tests.cpp +++ b/src/test/util_tests.cpp @@ -244,9 +244,9 @@ BOOST_AUTO_TEST_CASE(util_Join) // Version with unary operator const auto op_upper = [](const std::string& s) { return ToUpper(s); }; - BOOST_CHECK_EQUAL(Join({}, ", ", op_upper), ""); - BOOST_CHECK_EQUAL(Join({"foo"}, ", ", op_upper), "FOO"); - BOOST_CHECK_EQUAL(Join({"foo", "bar"}, ", ", op_upper), "FOO, BAR"); + BOOST_CHECK_EQUAL(Join(std::list{}, ", ", op_upper), ""); + BOOST_CHECK_EQUAL(Join(std::list{"foo"}, ", ", op_upper), "FOO"); + BOOST_CHECK_EQUAL(Join(std::list{"foo", "bar"}, ", ", op_upper), "FOO, BAR"); } BOOST_AUTO_TEST_CASE(util_ReplaceAll) diff --git a/src/util/string.h b/src/util/string.h index f8d36493b8..0bcf7d760f 100644 --- a/src/util/string.h +++ b/src/util/string.h @@ -58,27 +58,30 @@ void ReplaceAll(std::string& in_out, const std::string& search, const std::strin } /** - * Join a list of items + * Join all container items. Typically used to concatenate strings but accepts + * containers with elements of any type. * - * @param list The list to join - * @param separator The separator - * @param unary_op Apply this operator to each item in the list + * @param container The items to join + * @param separator The separator + * @param unary_op Apply this operator to each item */ -template -auto Join(const std::vector& list, const BaseType& separator, UnaryOp unary_op) +template +auto Join(const C& container, const S& separator, UnaryOp unary_op) { - decltype(unary_op(list.at(0))) ret; - for (size_t i = 0; i < list.size(); ++i) { - if (i > 0) ret += separator; - ret += unary_op(list.at(i)); + decltype(unary_op(*container.begin())) ret; + bool first{true}; + for (const auto& item : container) { + if (!first) ret += separator; + ret += unary_op(item); + first = false; } return ret; } -template -T Join(const std::vector& list, const T2& separator) +template +auto Join(const C& container, const S& separator) { - return Join(list, separator, [](const T& i) { return i; }); + return Join(container, separator, [](const auto& i) { return i; }); } /** -- cgit v1.2.3 From fa95315655fcd31a5482f5313faf04dbfa4de580 Mon Sep 17 00:00:00 2001 From: MacroFake Date: Fri, 19 Aug 2022 19:31:51 +0200 Subject: Use new Join() helper for ListBlockFilterTypes() --- src/blockfilter.cpp | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/blockfilter.cpp b/src/blockfilter.cpp index 43d88df720..85929747be 100644 --- a/src/blockfilter.cpp +++ b/src/blockfilter.cpp @@ -3,7 +3,6 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include -#include #include #include @@ -13,6 +12,7 @@ #include