Inline StringRef::operator==

This enables its inlining even without LTO, which in turns enables
callers to determine that two StringRefs are unequals with simple
comparison of two numbers, without any function calls.
This commit is contained in:
Martin Hořeňovský 2023-02-19 14:03:03 +01:00
parent 2befd98da2
commit e1dbad4c9e
No known key found for this signature in database
GPG Key ID: DE48307B8B0D381A
2 changed files with 6 additions and 5 deletions

View File

@ -17,10 +17,6 @@ namespace Catch {
: StringRef( rawChars, std::strlen(rawChars) )
{}
auto StringRef::operator == ( StringRef other ) const noexcept -> bool {
return m_size == other.m_size
&& (std::memcmp( m_start, other.m_start, m_size ) == 0);
}
bool StringRef::operator<(StringRef rhs) const noexcept {
if (m_size < rhs.m_size) {

View File

@ -13,6 +13,8 @@
#include <iosfwd>
#include <cassert>
#include <cstring>
namespace Catch {
/// A non-owning string class (similar to the forthcoming std::string_view)
@ -49,7 +51,10 @@ namespace Catch {
}
public: // operators
auto operator == ( StringRef other ) const noexcept -> bool;
auto operator == ( StringRef other ) const noexcept -> bool {
return m_size == other.m_size
&& (std::memcmp( m_start, other.m_start, m_size ) == 0);
}
auto operator != (StringRef other) const noexcept -> bool {
return !(*this == other);
}