mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-25 09:00:22 +00:00
AK: Make CaseInsensitiveStringTraits allocation-free
Instead of calling String::to_lowercase(), do case-insensitive hashing and comparison.
This commit is contained in:
parent
1b6ed558bb
commit
2dd3b54827
Notes:
sideshowbarker
2024-07-17 18:32:08 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/2dd3b54827
3 changed files with 9 additions and 2 deletions
|
@ -305,8 +305,8 @@ struct Traits<String> : public GenericTraits<String> {
|
|||
};
|
||||
|
||||
struct CaseInsensitiveStringTraits : public Traits<String> {
|
||||
static unsigned hash(const String& s) { return s.impl() ? s.to_lowercase().impl()->hash() : 0; }
|
||||
static bool equals(const String& a, const String& b) { return a.to_lowercase() == b.to_lowercase(); }
|
||||
static unsigned hash(String const& s) { return s.impl() ? s.impl()->case_insensitive_hash() : 0; }
|
||||
static bool equals(String const& a, String const& b) { return a.equals_ignoring_case(b); }
|
||||
};
|
||||
|
||||
bool operator<(const char*, const String&);
|
||||
|
|
|
@ -133,6 +133,11 @@ NonnullRefPtr<StringImpl> StringImpl::to_uppercase() const
|
|||
return const_cast<StringImpl&>(*this);
|
||||
}
|
||||
|
||||
unsigned StringImpl::case_insensitive_hash() const
|
||||
{
|
||||
return case_insensitive_string_hash(characters(), length());
|
||||
}
|
||||
|
||||
void StringImpl::compute_hash() const
|
||||
{
|
||||
if (!length())
|
||||
|
|
|
@ -75,6 +75,8 @@ public:
|
|||
return m_hash;
|
||||
}
|
||||
|
||||
unsigned case_insensitive_hash() const;
|
||||
|
||||
bool is_fly() const { return m_fly; }
|
||||
void set_fly(Badge<FlyString>, bool fly) const { m_fly = fly; }
|
||||
|
||||
|
|
Loading…
Reference in a new issue