diff options
author | Pieter Wuille <pieter@wuille.net> | 2022-04-04 15:05:47 -0400 |
---|---|---|
committer | MacroFake <falke.marco@gmail.com> | 2022-04-27 14:13:39 +0200 |
commit | e7d2fbda63c346ae88767c3f8d4db3edeae2dc0b (patch) | |
tree | 4dd8119287a61d27f9b95b2a33a946ac8120d7e9 /src/util/string.h | |
parent | 8ffbd1412d887535ce5eb613884858c319bd12be (diff) | |
download | bitcoin-e7d2fbda63c346ae88767c3f8d4db3edeae2dc0b.tar.xz |
Use std::string_view throughout util strencodings/string
Diffstat (limited to 'src/util/string.h')
-rw-r--r-- | src/util/string.h | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/src/util/string.h b/src/util/string.h index bcd6905fd5..81f5e21111 100644 --- a/src/util/string.h +++ b/src/util/string.h @@ -21,17 +21,22 @@ return spanparsing::Split<std::string>(str, sep); } -[[nodiscard]] inline std::string TrimString(const std::string& str, const std::string& pattern = " \f\n\r\t\v") +[[nodiscard]] inline std::string_view TrimStringView(std::string_view str, std::string_view pattern = " \f\n\r\t\v") { std::string::size_type front = str.find_first_not_of(pattern); if (front == std::string::npos) { - return std::string(); + return {}; } std::string::size_type end = str.find_last_not_of(pattern); return str.substr(front, end - front + 1); } -[[nodiscard]] inline std::string RemovePrefix(const std::string& str, const std::string& prefix) +[[nodiscard]] inline std::string TrimString(std::string_view str, std::string_view pattern = " \f\n\r\t\v") +{ + return std::string(TrimStringView(str, pattern)); +} + +[[nodiscard]] inline std::string_view RemovePrefixView(std::string_view str, std::string_view prefix) { if (str.substr(0, prefix.size()) == prefix) { return str.substr(prefix.size()); @@ -39,6 +44,11 @@ return str; } +[[nodiscard]] inline std::string RemovePrefix(std::string_view str, std::string_view prefix) +{ + return std::string(RemovePrefixView(str, prefix)); +} + /** * Join a list of items * @@ -58,14 +68,14 @@ auto Join(const std::vector<T>& list, const BaseType& separator, UnaryOp unary_o return ret; } -template <typename T> -T Join(const std::vector<T>& list, const T& separator) +template <typename T, typename T2> +T Join(const std::vector<T>& 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<std::string>& list, const std::string& separator) +inline std::string Join(const std::vector<std::string>& list, std::string_view separator) { return Join<std::string>(list, separator); } @@ -81,9 +91,12 @@ inline std::string MakeUnorderedList(const std::vector<std::string>& items) /** * Check if a string does not contain any embedded NUL (\0) characters */ -[[nodiscard]] inline bool ValidAsCString(const std::string& str) noexcept +[[nodiscard]] inline bool ValidAsCString(std::string_view str) noexcept { - return str.size() == strlen(str.c_str()); + for (auto c : str) { + if (c == 0) return false; + } + return true; } /** |