From 4333970abdd54863a591f95df3c3e7e968aa2519 Mon Sep 17 00:00:00 2001 From: Neil Date: Mon, 8 Apr 2019 08:34:52 +1000 Subject: Rename FontNames to UniqueStringSet and move into UniqueString. It may be useful in more situations than just font names. --- src/UniqueString.cxx | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src/UniqueString.cxx') diff --git a/src/UniqueString.cxx b/src/UniqueString.cxx index 7e289a1a0..322599672 100644 --- a/src/UniqueString.cxx +++ b/src/UniqueString.cxx @@ -6,6 +6,7 @@ // The License.txt file describes the conditions under which this software may be distributed. #include +#include #include #include @@ -25,4 +26,31 @@ UniqueString UniqueStringCopy(const char *text) { return UniqueString(upcNew.release()); } +// A set of strings that always returns the same pointer for each string. + +UniqueStringSet::UniqueStringSet() noexcept = default; + +UniqueStringSet::~UniqueStringSet() { + strings.clear(); +} + +void UniqueStringSet::Clear() noexcept { + strings.clear(); +} + +const char *UniqueStringSet::Save(const char *text) { + if (!text) + return nullptr; + + const std::string_view sv(text); + for (const UniqueString &us : strings) { + if (sv == us.get()) { + return us.get(); + } + } + + strings.push_back(UniqueStringCopy(text)); + return strings.back().get(); +} + } -- cgit v1.2.3