diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2016-02-05 00:20:45 +0000 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2016-02-05 00:20:45 +0000 |
| commit | ff6eacffa3f5bb10e0bf0d31b3eabc7ac10fcd51 (patch) | |
| tree | 2248f19174e82af9cf9796a375e848d232f7b685 /src/shared_string.cc | |
| parent | a8eddd03f0e328b08d23ec9f83c5c61e9a9b202a (diff) | |
dont intern SharedStrings but StringDataPtr
Diffstat (limited to 'src/shared_string.cc')
| -rw-r--r-- | src/shared_string.cc | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/shared_string.cc b/src/shared_string.cc index b594a56f..9d816a58 100644 --- a/src/shared_string.cc +++ b/src/shared_string.cc @@ -4,22 +4,22 @@ namespace Kakoune { -SharedString StringRegistry::intern(StringView str) +StringDataPtr StringRegistry::intern(StringView str) { - auto it = m_strings.find({str, SharedString::NoCopy{}}); + auto it = m_strings.find(str); if (it == m_strings.end()) { - SharedString shared_str = str; - it = m_strings.emplace(shared_str).first; + auto data = StringData::create(str); + it = m_strings.emplace(data->strview(), data).first; } - return *it; + return it->second; } void StringRegistry::purge_unused() { for (auto it = m_strings.begin(); it != m_strings.end(); ) { - if (it->m_storage->refcount == 1) + if (it->second->refcount == 1) it = m_strings.erase(it); else ++it; @@ -34,8 +34,8 @@ void StringRegistry::debug_stats() const size_t count = m_strings.size(); for (auto& st : m_strings) { - total_refcount += st.m_storage->refcount - 1; - total_size += (int)st.m_storage->length; + total_refcount += st.second->refcount - 1; + total_size += (int)st.second->length; } write_to_debug_buffer(format(" data size: {}, mean: {}", total_size, (float)total_size/count)); write_to_debug_buffer(format(" refcounts: {}, mean: {}", total_refcount, (float)total_refcount/count)); |
