mirror of
https://github.com/zebrajr/ladybird.git
synced 2025-12-06 00:19:53 +01:00
AK: Use HashMap::ensure() for FlyString and Utf16FlyString lookups
This consolidates sometimes-two hash lookups into always-one, which is less work in the case where a new fly-string is introduced.
This commit is contained in:
parent
ca772caee6
commit
9425ee6d2b
|
|
@ -61,15 +61,16 @@ FlyString::FlyString(String const& string)
|
|||
return;
|
||||
}
|
||||
|
||||
auto it = all_fly_strings().find(string.m_impl.data);
|
||||
if (it == all_fly_strings().end()) {
|
||||
m_data = string;
|
||||
all_fly_strings().set(string.m_impl.data);
|
||||
string.m_impl.data->set_fly_string(true);
|
||||
} else {
|
||||
m_data.m_impl.data = *it;
|
||||
m_data.m_impl.data->ref();
|
||||
}
|
||||
auto const* shared_data = all_fly_strings().ensure(
|
||||
string.hash(),
|
||||
[&](auto& candidate) { return *candidate == *string.m_impl.data; },
|
||||
[&] {
|
||||
string.m_impl.data->set_fly_string(true);
|
||||
return string.m_impl.data;
|
||||
},
|
||||
HashSetExistingEntryBehavior::Keep);
|
||||
shared_data->ref();
|
||||
m_data.m_impl.data = shared_data;
|
||||
}
|
||||
|
||||
FlyString& FlyString::operator=(String const& string)
|
||||
|
|
|
|||
|
|
@ -85,14 +85,16 @@ Utf16FlyString::Utf16FlyString(Utf16String const& string)
|
|||
return;
|
||||
}
|
||||
|
||||
if (auto it = all_utf16_fly_strings().find(data); it == all_utf16_fly_strings().end()) {
|
||||
m_data = string;
|
||||
auto const* shared_data = all_utf16_fly_strings().ensure(
|
||||
data->hash(),
|
||||
[&](auto& candidate) { return *data == *candidate; },
|
||||
[&] {
|
||||
data->mark_as_fly_string({});
|
||||
return data;
|
||||
},
|
||||
HashSetExistingEntryBehavior::Keep);
|
||||
|
||||
all_utf16_fly_strings().set(data);
|
||||
data->mark_as_fly_string({});
|
||||
} else {
|
||||
m_data.set_data({}, *it);
|
||||
}
|
||||
m_data.set_data({}, shared_data);
|
||||
}
|
||||
|
||||
size_t Utf16FlyString::number_of_utf16_fly_strings()
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user