diff options
| author | Billy O'Neal <bion@microsoft.com> | 2020-12-21 09:19:57 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-12-21 09:19:57 -0800 |
| commit | d97eae3338f1a4657c35ad136ea426f66d6936f2 (patch) | |
| tree | f58154dc0966f2c1f9377a7a628ee4e4c537410a /toolsrc/include | |
| parent | edb61470d85ab5583c99b998983bab2eeb454929 (diff) | |
| download | vcpkg-d97eae3338f1a4657c35ad136ea426f66d6936f2.tar.gz vcpkg-d97eae3338f1a4657c35ad136ea426f66d6936f2.zip | |
Print failing upload attempts in !debug. (#15206)
Other changes:
* Changed Strings::replace_all to use more StringView
* Introduced Strings::inplace_replace_all for the common x = replace_all(move(x) pattern and tests
-> Also fixed bug if the search string was empty consuming infinite memory!
* Added many missing {}s in binarycaching.cpp
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; |
