diff --git a/src/util/StringView.cxx b/src/util/StringView.cxx index b1abf96159bc8640245d4c7108cae85898826bba..7e77e5459bd1b101ce3934ba3a51cdd043bdc554 100644 --- a/src/util/StringView.cxx +++ b/src/util/StringView.cxx @@ -31,14 +31,14 @@ #include "CharUtil.hxx" void -StringView::StripLeft() +StringView::StripLeft() noexcept { while (!IsEmpty() && IsWhitespaceOrNull(front())) pop_front(); } void -StringView::StripRight() +StringView::StripRight() noexcept { while (!IsEmpty() && IsWhitespaceOrNull(back())) pop_back(); diff --git a/src/util/StringView.hxx b/src/util/StringView.hxx index dce93d38838189d729ef93ebe18b8eca7638faab..4a16eb9189bd6e45661e80207a67b4619fd2db88 100644 --- a/src/util/StringView.hxx +++ b/src/util/StringView.hxx @@ -37,94 +37,94 @@ struct StringView : ConstBuffer<char> { StringView() = default; - constexpr StringView(pointer_type _data, size_type _size) + constexpr StringView(pointer_type _data, size_type _size) noexcept :ConstBuffer<char>(_data, _size) {} - constexpr StringView(pointer_type _begin, pointer_type _end) + constexpr StringView(pointer_type _begin, pointer_type _end) noexcept :ConstBuffer<char>(_begin, _end - _begin) {} - StringView(pointer_type _data) + StringView(pointer_type _data) noexcept :ConstBuffer<char>(_data, _data != nullptr ? strlen(_data) : 0) {} - constexpr StringView(std::nullptr_t n) + constexpr StringView(std::nullptr_t n) noexcept :ConstBuffer<char>(n) {} - static constexpr StringView Empty() { + static constexpr StringView Empty() noexcept { return StringView("", size_t(0)); } template<size_t n> - static constexpr StringView Literal(const char (&_data)[n]) { + static constexpr StringView Literal(const char (&_data)[n]) noexcept { static_assert(n > 0, ""); return {_data, n - 1}; } - static constexpr StringView Literal() { + static constexpr StringView Literal() noexcept { return StringView("", size_t(0)); } - void SetEmpty() { + void SetEmpty() noexcept { data = ""; size = 0; } gcc_pure - pointer_type Find(char ch) const { + pointer_type Find(char ch) const noexcept { return (pointer_type)memchr(data, ch, size); } - StringView &operator=(std::nullptr_t) { + StringView &operator=(std::nullptr_t) noexcept { data = nullptr; size = 0; return *this; } - StringView &operator=(pointer_type _data) { + StringView &operator=(pointer_type _data) noexcept { data = _data; size = _data != nullptr ? strlen(_data) : 0; return *this; } gcc_pure - bool StartsWith(StringView needle) const { + bool StartsWith(StringView needle) const noexcept { return size >= needle.size && memcmp(data, needle.data, needle.size) == 0; } gcc_pure - bool Equals(StringView other) const { + bool Equals(StringView other) const noexcept { return size == other.size && memcmp(data, other.data, size) == 0; } template<size_t n> - bool EqualsLiteral(const char (&other)[n]) const { + bool EqualsLiteral(const char (&other)[n]) const noexcept { return Equals(Literal(other)); } gcc_pure - bool EqualsIgnoreCase(StringView other) const { + bool EqualsIgnoreCase(StringView other) const noexcept { return size == other.size && strncasecmp(data, other.data, size) == 0; } template<size_t n> - bool EqualsLiteralIgnoreCase(const char (&other)[n]) const { + bool EqualsLiteralIgnoreCase(const char (&other)[n]) const noexcept { return EqualsIgnoreCase(Literal(other)); } /** * Skip all whitespace at the beginning. */ - void StripLeft(); + void StripLeft() noexcept; /** * Skip all whitespace at the end. */ - void StripRight(); + void StripRight() noexcept; - void Strip() { + void Strip() noexcept { StripLeft(); StripRight(); }