diff --git a/AK/FlyString.cpp b/AK/FlyString.cpp index d8795e1019..648b8cf492 100644 --- a/AK/FlyString.cpp +++ b/AK/FlyString.cpp @@ -97,7 +97,7 @@ bool FlyString::is_empty() const unsigned FlyString::hash() const { - return bytes_as_string_view().hash(); + return String::fly_string_data_to_hash({}, m_data); } FlyString::operator String() const @@ -170,7 +170,7 @@ DeprecatedFlyString FlyString::to_deprecated_fly_string() const unsigned Traits::hash(FlyString const& fly_string) { - return fly_string.bytes_as_string_view().hash(); + return fly_string.hash(); } ErrorOr Formatter::format(FormatBuilder& builder, FlyString const& fly_string) diff --git a/AK/String.cpp b/AK/String.cpp index 005a53d192..32d88547c7 100644 --- a/AK/String.cpp +++ b/AK/String.cpp @@ -565,6 +565,18 @@ StringView String::fly_string_data_to_string_view(Badge, uintptr_t co return string_data->bytes_as_string_view(); } +u32 String::fly_string_data_to_hash(Badge, uintptr_t const& data) +{ + if (has_short_string_bit(data)) { + auto const* short_string = reinterpret_cast(&data); + auto bytes = short_string->bytes(); + return string_hash(reinterpret_cast(bytes.data()), bytes.size()); + } + + auto const* string_data = reinterpret_cast(data); + return string_data->hash(); +} + uintptr_t String::to_fly_string_data(Badge) const { return reinterpret_cast(m_data); diff --git a/AK/String.h b/AK/String.h index abf792ea09..72f3650469 100644 --- a/AK/String.h +++ b/AK/String.h @@ -213,6 +213,7 @@ public: [[nodiscard]] static String fly_string_data_to_string(Badge, uintptr_t const&); [[nodiscard]] static StringView fly_string_data_to_string_view(Badge, uintptr_t const&); + [[nodiscard]] static u32 fly_string_data_to_hash(Badge, uintptr_t const&); [[nodiscard]] uintptr_t to_fly_string_data(Badge) const; static void ref_fly_string_data(Badge, uintptr_t);