aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfanquake <fanquake@gmail.com>2022-08-16 09:15:17 +0100
committerfanquake <fanquake@gmail.com>2022-08-16 09:19:28 +0100
commitcf39913e574857b8066795d33cb88ac5e45d05db (patch)
tree02df76ab292cdac9fa6a857e4bd58bf3b54c0cb8
parentb63c24a509adc1672176c0e3700f25eb1f369f20 (diff)
parentfea75ad3caa29972db32d3ce7e0fe125ec77a0eb (diff)
downloadbitcoin-cf39913e574857b8066795d33cb88ac5e45d05db.tar.xz
Merge bitcoin/bitcoin#25803: refactor: Drop `boost/algorithm/string/replace.hpp` dependency
fea75ad3caa29972db32d3ce7e0fe125ec77a0eb refactor: Drop `boost/algorithm/string/replace.hpp` dependency (Hennadii Stepanov) 857526e8cbb0847a865e9c2509425960d458f535 test: Add test case for `ReplaceAll()` function (Hennadii Stepanov) Pull request description: A new implementation of the `ReplaceAll()` seems enough for all of our purposes. ACKs for top commit: adam2k: ACK Tested fea75ad3caa29972db32d3ce7e0fe125ec77a0eb theStack: Code-review ACK fea75ad3caa29972db32d3ce7e0fe125ec77a0eb Tree-SHA512: dacfffc9d2bd1fb9f034baf8c045b1e8657b766db2f0a7f8ef7e25ee6cd888f315b0124c54aba7a29ae59186b176ef9868a8b709dc995ea215c6b4ce58e174d9
-rw-r--r--src/test/util_tests.cpp16
-rw-r--r--src/util/string.cpp9
-rw-r--r--src/util/string.h2
-rwxr-xr-xtest/lint/lint-includes.py3
4 files changed, 23 insertions, 7 deletions
diff --git a/src/test/util_tests.cpp b/src/test/util_tests.cpp
index fda56ccff7..70e2f89e0b 100644
--- a/src/test/util_tests.cpp
+++ b/src/test/util_tests.cpp
@@ -249,6 +249,22 @@ BOOST_AUTO_TEST_CASE(util_Join)
BOOST_CHECK_EQUAL(Join<std::string>({"foo", "bar"}, ", ", op_upper), "FOO, BAR");
}
+BOOST_AUTO_TEST_CASE(util_ReplaceAll)
+{
+ const std::string original("A test \"%s\" string '%s'.");
+ auto test_replaceall = [&original](const std::string& search, const std::string& substitute, const std::string& expected) {
+ auto test = original;
+ ReplaceAll(test, search, substitute);
+ BOOST_CHECK_EQUAL(test, expected);
+ };
+
+ test_replaceall("", "foo", original);
+ test_replaceall(original, "foo", "foo");
+ test_replaceall("%s", "foo", "A test \"foo\" string 'foo'.");
+ test_replaceall("\"", "foo", "A test foo%sfoo string '%s'.");
+ test_replaceall("'", "foo", "A test \"%s\" string foo%sfoo.");
+}
+
BOOST_AUTO_TEST_CASE(util_TrimString)
{
BOOST_CHECK_EQUAL(TrimString(" foo bar "), "foo bar");
diff --git a/src/util/string.cpp b/src/util/string.cpp
index dff782c330..db6dbe4135 100644
--- a/src/util/string.cpp
+++ b/src/util/string.cpp
@@ -4,11 +4,12 @@
#include <util/string.h>
-#include <boost/algorithm/string/replace.hpp>
-
+#include <regex>
#include <string>
+#include <utility>
-void ReplaceAll(std::string& in_out, std::string_view search, std::string_view substitute)
+void ReplaceAll(std::string& in_out, const std::string& search, const std::string& substitute)
{
- boost::replace_all(in_out, search, substitute);
+ if (search.empty()) return;
+ in_out = std::regex_replace(in_out, std::regex(std::move(search)), substitute);
}
diff --git a/src/util/string.h b/src/util/string.h
index df20e34ae9..dd4de888bb 100644
--- a/src/util/string.h
+++ b/src/util/string.h
@@ -17,7 +17,7 @@
#include <string_view>
#include <vector>
-void ReplaceAll(std::string& in_out, std::string_view search, std::string_view substitute);
+void ReplaceAll(std::string& in_out, const std::string& search, const std::string& substitute);
[[nodiscard]] inline std::vector<std::string> SplitString(std::string_view str, char sep)
{
diff --git a/test/lint/lint-includes.py b/test/lint/lint-includes.py
index afdca0d418..b3fa4b9303 100755
--- a/test/lint/lint-includes.py
+++ b/test/lint/lint-includes.py
@@ -21,8 +21,7 @@ EXCLUDED_DIRS = ["src/leveldb/",
"src/minisketch/",
]
-EXPECTED_BOOST_INCLUDES = ["boost/algorithm/string/replace.hpp",
- "boost/date_time/posix_time/posix_time.hpp",
+EXPECTED_BOOST_INCLUDES = ["boost/date_time/posix_time/posix_time.hpp",
"boost/multi_index/hashed_index.hpp",
"boost/multi_index/ordered_index.hpp",
"boost/multi_index/sequenced_index.hpp",