7#include "profiler/Profiler.h"
19 static constexpr uint32_t MAX_SSO_SIZE = 15;
37 if (m_size > MAX_SSO_SIZE)
43 uint32_t
hash()
const {
return m_hash; }
44 size_t size()
const {
return m_size; }
45 const char *
c_str()
const {
return m_size > MAX_SSO_SIZE ? m_str.ptr->get() : m_str.data; }
48 operator std::string_view()
const {
return sv(); }
49 operator bool()
const {
return m_size; }
51 bool operator==(std::string_view rhs)
const {
return sv() == rhs; }
52 bool operator!=(std::string_view rhs)
const {
return !(*
this == rhs); }
53 bool operator<(std::string_view rhs)
const {
return sv() < rhs; }
63 mutable std::atomic<uint32_t> refcount;
64 char *get() {
return reinterpret_cast<char *
>(&
this[1]); }
66 uint32_t ref()
const {
return refcount.fetch_add(1) + 1; }
67 uint32_t unref()
const {
return refcount.fetch_sub(1) - 1; }
68 uint32_t get_ref()
const {
return refcount.load(); }
72 static StringData *make_data(
const char *s, uint32_t
size, uint32_t
hash);
89 using Data = StringName::StringData *;
99 size_t Size()
const {
return entries; }
107 if (
auto *ptr =
Find(key))
113 void Erase(uint32_t key);
117 void Reclaim(
bool force =
false);
122 std::vector<uint32_t> keys;
123 std::vector<uint8_t> dist;
124 std::vector<Data> values;
126 Profiler::Clock m_reclaimClock;
Definition StringName.h:18
std::string_view sv() const
Definition StringName.h:46
char data[16]
Definition StringName.h:78
StringName & operator=(const StringName &rhs)
Definition StringName.cpp:28
bool operator==(std::string_view rhs) const
Definition StringName.h:51
bool operator==(const StringName &rhs) const
Definition StringName.h:55
StringData * ptr
Definition StringName.h:77
~StringName()
Definition StringName.h:35
bool operator!=(const StringName &rhs) const
Definition StringName.h:56
StringName(const StringName &rhs)
Definition StringName.h:28
StringName(StringName &&rhs)
Definition StringName.h:31
bool operator<(const StringName &rhs) const
Definition StringName.h:57
bool operator<(std::string_view rhs) const
Definition StringName.h:53
size_t size() const
Definition StringName.h:44
const char * c_str() const
Definition StringName.h:45
bool operator!=(std::string_view rhs) const
Definition StringName.h:52
StringName()
Definition StringName.h:22
uint32_t hash() const
Definition StringName.h:43
Definition StringName.h:87
void Reclaim(bool force=false)
Definition StringName.cpp:161
static StringTable * Get()
Definition StringName.cpp:205
size_t Size() const
Definition StringName.h:99
Data * Create(uint32_t key)
Definition StringName.cpp:89
StringTable(uint32_t size)
Definition StringName.h:91
Data & FindOrCreate(uint32_t key)
Definition StringName.h:105
Data * Find(uint32_t key)
Definition StringName.cpp:71
StringName::StringData * Data
Definition StringName.h:89
size_t Capacity() const
Definition StringName.h:100
void Erase(uint32_t key)
Definition StringName.cpp:127