From 31ac93d051be5be78419ed16da9fcae9783eb4e6 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Tue, 23 Feb 2021 14:13:57 +0100 Subject: [PATCH] AK: Optimize StringView::operator==(const char*) a little bit Don't compute the strlen() of the string we're comparing against first. This can save a lot of time if we're comparing against something that already fails to match in the first few characters. --- AK/StringView.h | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/AK/StringView.h b/AK/StringView.h index 7ff37437c3..6f6f9058de 100644 --- a/AK/StringView.h +++ b/AK/StringView.h @@ -144,11 +144,15 @@ public: return !cstring; if (!cstring) return false; - size_t other_length = __builtin_strlen(cstring); - if (m_length != other_length) - return false; - return !__builtin_memcmp(m_characters, cstring, m_length); + // NOTE: `m_characters` is not guaranteed to be null-terminated, but `cstring` is. + const char* cp = cstring; + for (size_t i = 0; i < m_length; ++i) { + if (m_characters[i] != *(cp++)) + return false; + } + return !*cp; } + bool operator!=(const char* cstring) const { return !(*this == cstring);