mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 02:27:43 +00:00
AK: Add FlyString, a simple flyweight string class
FlyString is a flyweight string class that wraps a RefPtr<StringImpl> known to be unique among the set of FlyStrings. The class is very unoptimized at the moment. When to use FlyString: - When you want O(1) string comparison - When you want to deduplicate a lot of identical strings When not to use FlyString: - For strings that don't need either of the above features - For strings that are likely to be unique
This commit is contained in:
parent
0395b25e3f
commit
4f72f6b886
15 changed files with 236 additions and 32 deletions
|
@ -26,6 +26,7 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include <AK/Badge.h>
|
||||
#include <AK/RefCounted.h>
|
||||
#include <AK/RefPtr.h>
|
||||
#include <AK/Types.h>
|
||||
|
@ -70,11 +71,15 @@ public:
|
|||
return m_hash;
|
||||
}
|
||||
|
||||
bool is_fly() const { return m_fly; }
|
||||
void set_fly(Badge<FlyString>, bool fly) const { m_fly = fly; }
|
||||
|
||||
private:
|
||||
enum ConstructTheEmptyStringImplTag {
|
||||
ConstructTheEmptyStringImpl
|
||||
};
|
||||
explicit StringImpl(ConstructTheEmptyStringImplTag)
|
||||
: m_fly(true)
|
||||
{
|
||||
m_inline_buffer[0] = '\0';
|
||||
}
|
||||
|
@ -89,6 +94,7 @@ private:
|
|||
size_t m_length { 0 };
|
||||
mutable unsigned m_hash { 0 };
|
||||
mutable bool m_has_hash { false };
|
||||
mutable bool m_fly { false };
|
||||
char m_inline_buffer[0];
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue