From cd8278e489351ba68fbfc3cebc0298e5d3f8d867 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sat, 24 Aug 2019 22:28:42 +0200 Subject: [PATCH] AK: Add String::operator==(StringView) Comparing a String to a StringView would instantiate a temporary String just for the comparison. Let's not do that. :^) --- AK/AKString.h | 3 +++ AK/String.cpp | 14 ++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/AK/AKString.h b/AK/AKString.h index 8606d2934e..0325f3831d 100755 --- a/AK/AKString.h +++ b/AK/AKString.h @@ -133,6 +133,9 @@ public: bool operator==(const String&) const; bool operator!=(const String& other) const { return !(*this == other); } + bool operator==(const StringView&) const; + bool operator!=(const StringView& other) const { return !(*this == other); } + bool operator<(const String&) const; bool operator<(const char*) const; bool operator>=(const String& other) const { return !(*this < other); } diff --git a/AK/String.cpp b/AK/String.cpp index 4f8d230259..40513aa6db 100644 --- a/AK/String.cpp +++ b/AK/String.cpp @@ -19,6 +19,20 @@ bool String::operator==(const String& other) const return !memcmp(characters(), other.characters(), length()); } +bool String::operator==(const StringView& other) const +{ + if (!m_impl) + return !other.m_characters; + + if (!other.m_characters) + return false; + + if (length() != other.length()) + return false; + + return !memcmp(characters(), other.characters_without_null_termination(), length()); +} + bool String::operator<(const String& other) const { if (!m_impl)