From 02e0fab19af9cf892ee651e5916c9895703cefdd Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 13 Apr 2020 12:05:19 +0200 Subject: [PATCH] AK: Let FlyString::hash() assume that the string was already hashed Since the FlyString deduplication mechanism uses a HashTable, we know that any StringImpl inside a non-null FlyString will already have its lazily computed hash. --- AK/FlyString.h | 4 ++-- AK/StringImpl.h | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/AK/FlyString.h b/AK/FlyString.h index a306682813..b66ab76024 100644 --- a/AK/FlyString.h +++ b/AK/FlyString.h @@ -55,7 +55,7 @@ public: const char* characters() const { return m_impl ? m_impl->characters() : nullptr; } size_t length() const { return m_impl ? m_impl->length() : 0; } - u32 hash() const { return m_impl ? m_impl->hash() : 0; } + [[gnu::always_inline]] inline u32 hash() const { return m_impl ? m_impl->existing_hash() : 0; } StringView view() const; @@ -73,7 +73,7 @@ private: template<> struct Traits : public GenericTraits { - static unsigned hash(const FlyString& s) { return s.impl() ? s.impl()->hash() : 0; } + static unsigned hash(const FlyString& s) { return s.hash(); } }; } diff --git a/AK/StringImpl.h b/AK/StringImpl.h index 87ae042b5c..5434a7e17c 100644 --- a/AK/StringImpl.h +++ b/AK/StringImpl.h @@ -71,6 +71,11 @@ public: return m_hash; } + unsigned existing_hash() const + { + return m_hash; + } + bool is_fly() const { return m_fly; } void set_fly(Badge, bool fly) const { m_fly = fly; }