diff options
Diffstat (limited to 'toolsrc/include')
| -rw-r--r-- | toolsrc/include/vcpkg/base/strings.h | 6 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/base/stringview.h | 31 |
2 files changed, 21 insertions, 16 deletions
diff --git a/toolsrc/include/vcpkg/base/strings.h b/toolsrc/include/vcpkg/base/strings.h index 5113ff2fc..16b39001b 100644 --- a/toolsrc/include/vcpkg/base/strings.h +++ b/toolsrc/include/vcpkg/base/strings.h @@ -188,7 +188,11 @@ namespace vcpkg::Strings return join(delimiter, v, [](const Element& x) -> const Element& { return x; }); } - std::string replace_all(std::string&& s, const std::string& search, StringView rep); + std::string replace_all(std::string&& s, StringView search, StringView rep); + + void inplace_replace_all(std::string& s, StringView search, StringView rep); + + void inplace_replace_all(std::string& s, char search, char rep) noexcept; std::string trim(std::string&& s); diff --git a/toolsrc/include/vcpkg/base/stringview.h b/toolsrc/include/vcpkg/base/stringview.h index 9238990fe..aba27f9d1 100644 --- a/toolsrc/include/vcpkg/base/stringview.h +++ b/toolsrc/include/vcpkg/base/stringview.h @@ -14,43 +14,44 @@ namespace vcpkg { static std::vector<StringView> find_all_enclosed(const StringView& input, const std::string& left_delim, - const std::string& right_delim); + const std::string& right_delim) noexcept; static StringView find_exactly_one_enclosed(const StringView& input, const std::string& left_tag, - const std::string& right_tag); + const std::string& right_tag) noexcept; static Optional<StringView> find_at_most_one_enclosed(const StringView& input, const std::string& left_tag, - const std::string& right_tag); + const std::string& right_tag) noexcept; constexpr StringView() = default; - StringView(const std::string& s); // Implicit by design + StringView(const std::string& s) noexcept; // Implicit by design // NOTE: we do this instead of the delegating constructor since delegating ctors are a perf footgun template<size_t Sz> - constexpr StringView(const char (&arr)[Sz]) : m_ptr(arr), m_size(Sz - 1) + constexpr StringView(const char (&arr)[Sz]) noexcept : m_ptr(arr), m_size(Sz - 1) { } - constexpr StringView(const char* ptr, size_t size) : m_ptr(ptr), m_size(size) { } - constexpr StringView(const char* b, const char* e) : m_ptr(b), m_size(static_cast<size_t>(e - b)) { } + constexpr StringView(const char* ptr, size_t size) noexcept : m_ptr(ptr), m_size(size) { } + constexpr StringView(const char* b, const char* e) noexcept : m_ptr(b), m_size(static_cast<size_t>(e - b)) { } - constexpr const char* begin() const { return m_ptr; } - constexpr const char* end() const { return m_ptr + m_size; } + constexpr const char* begin() const noexcept { return m_ptr; } + constexpr const char* end() const noexcept { return m_ptr + m_size; } - std::reverse_iterator<const char*> rbegin() const { return std::make_reverse_iterator(end()); } - std::reverse_iterator<const char*> rend() const { return std::make_reverse_iterator(begin()); } + std::reverse_iterator<const char*> rbegin() const noexcept { return std::make_reverse_iterator(end()); } + std::reverse_iterator<const char*> rend() const noexcept { return std::make_reverse_iterator(begin()); } - constexpr const char* data() const { return m_ptr; } - constexpr size_t size() const { return m_size; } + constexpr const char* data() const noexcept { return m_ptr; } + constexpr size_t size() const noexcept { return m_size; } + constexpr bool empty() const noexcept { return m_size == 0; } std::string to_string() const; void to_string(std::string& out) const; - StringView substr(size_t pos, size_t count = std::numeric_limits<size_t>::max()) const; + StringView substr(size_t pos, size_t count = std::numeric_limits<size_t>::max()) const noexcept; - constexpr char byte_at_index(size_t pos) const { return m_ptr[pos]; } + constexpr char byte_at_index(size_t pos) const noexcept { return m_ptr[pos]; } private: const char* m_ptr = 0; |
