diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2015-04-16 12:38:59 +0100 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2015-04-16 12:38:59 +0100 |
| commit | 2902fce437911cd728a92c6ba7f754183f8dfb33 (patch) | |
| tree | c053b0ae8aeaed3a7ac0a28f3cfe06fe3f36b576 /src | |
| parent | 491ffc4ffdaac291b87409d7e0e52a4a702cf04e (diff) | |
Use an UnorderedSet for string registry
Diffstat (limited to 'src')
| -rw-r--r-- | src/shared_string.cc | 12 | ||||
| -rw-r--r-- | src/shared_string.hh | 2 | ||||
| -rw-r--r-- | src/unordered_map.hh | 5 |
3 files changed, 12 insertions, 7 deletions
diff --git a/src/shared_string.cc b/src/shared_string.cc index 1d0cb5a9..2aec6920 100644 --- a/src/shared_string.cc +++ b/src/shared_string.cc @@ -6,20 +6,20 @@ namespace Kakoune SharedString StringRegistry::intern(StringView str) { - auto it = m_strings.find(str); + auto it = m_strings.find({str, SharedString::NoCopy{}}); if (it == m_strings.end()) { SharedString shared_str = str; - it = m_strings.emplace(shared_str, shared_str.m_storage).first; + it = m_strings.emplace(shared_str).first; } - return SharedString{it->second}; + return *it; } void StringRegistry::purge_unused() { for (auto it = m_strings.begin(); it != m_strings.end(); ) { - if (it->second->refcount == 1) + if (it->m_storage->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.second->refcount - 1; - total_size += (int)st.second->length; + total_refcount += st.m_storage->refcount - 1; + total_size += (int)st.m_storage->length; } write_debug(format(" data size: {}, mean: {}", total_size, (float)total_size/count)); write_debug(format(" refcounts: {}, mean: {}", total_refcount, (float)total_refcount/count)); diff --git a/src/shared_string.hh b/src/shared_string.hh index 5c531ebd..c5de1747 100644 --- a/src/shared_string.hh +++ b/src/shared_string.hh @@ -109,7 +109,7 @@ public: void purge_unused(); private: - UnorderedMap<StringView, StringDataPtr, MemoryDomain::SharedString> m_strings; + UnorderedSet<SharedString, MemoryDomain::SharedString> m_strings; }; inline SharedString intern(StringView str) diff --git a/src/unordered_map.hh b/src/unordered_map.hh index 13246fac..822017fe 100644 --- a/src/unordered_map.hh +++ b/src/unordered_map.hh @@ -5,6 +5,7 @@ #include "memory.hh" #include <unordered_map> +#include <unordered_set> namespace Kakoune { @@ -13,6 +14,10 @@ template<typename Key, typename Value, MemoryDomain domain = TypeDomain<Key>::do using UnorderedMap = std::unordered_map<Key, Value, Hash<Key>, std::equal_to<Key>, Allocator<std::pair<const Key, Value>, domain>>; +template<typename Key, MemoryDomain domain = TypeDomain<Key>::domain()> +using UnorderedSet = std::unordered_set<Key, Hash<Key>, std::equal_to<Key>, + Allocator<const Key, domain>>; + } #endif // unordered_map_hh_INCLUDED |
