aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/include
diff options
context:
space:
mode:
authorBilly O'Neal <bion@microsoft.com>2020-12-21 09:19:57 -0800
committerGitHub <noreply@github.com>2020-12-21 09:19:57 -0800
commitd97eae3338f1a4657c35ad136ea426f66d6936f2 (patch)
treef58154dc0966f2c1f9377a7a628ee4e4c537410a /toolsrc/include
parentedb61470d85ab5583c99b998983bab2eeb454929 (diff)
downloadvcpkg-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.h6
-rw-r--r--toolsrc/include/vcpkg/base/stringview.h31
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;