Always go through StringView to compare strings

That avoids creating temporary String needlessly
This commit is contained in:
Maxime Coste 2015-03-30 19:59:08 +01:00
parent 942122837a
commit 8761fc34f4

View File

@ -20,23 +20,6 @@ class StringOps
public:
using value_type = CharType;
[[gnu::always_inline]]
friend bool operator==(const Type& lhs, const Type& rhs)
{
return lhs.length() == rhs.length() and
std::equal(lhs.begin(), lhs.end(), rhs.begin());
}
[[gnu::always_inline]]
friend bool operator!=(const Type& lhs, const Type& rhs)
{ return not (lhs == rhs); }
friend bool operator<(const Type& lhs, const Type& rhs)
{
return std::lexicographical_compare(lhs.begin(), lhs.end(),
rhs.begin(), rhs.end());
}
friend inline size_t hash_value(const Type& str)
{
return hash_data(str.data(), (int)str.length());
@ -220,6 +203,23 @@ inline String operator+(StringView lhs, StringView rhs)
return res;
}
[[gnu::always_inline]]
inline bool operator==(const StringView& lhs, const StringView& rhs)
{
return lhs.length() == rhs.length() and
std::equal(lhs.begin(), lhs.end(), rhs.begin());
}
[[gnu::always_inline]]
inline bool operator!=(const StringView& lhs, const StringView& rhs)
{ return not (lhs == rhs); }
inline bool operator<(const StringView& lhs, const StringView& rhs)
{
return std::lexicographical_compare(lhs.begin(), lhs.end(),
rhs.begin(), rhs.end());
}
Vector<String> split(StringView str, char separator, char escape);
Vector<StringView> split(StringView str, char separator);