From 4a44fd852450d9e97032633524f92d1fad5f7187 Mon Sep 17 00:00:00 2001 From: Neil Date: Mon, 8 Apr 2019 08:34:52 +1000 Subject: Backport: Rename FontNames to UniqueStringSet and move into UniqueString. It may be useful in more situations than just font names. Backport of changeset 7409:a70a4ee51448. --- src/UniqueString.cxx | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'src/UniqueString.cxx') diff --git a/src/UniqueString.cxx b/src/UniqueString.cxx index dcbdc441c..aadc2ae7e 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,30 @@ 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; + + for (const UniqueString &us : strings) { + if (text == us.get()) { + return us.get(); + } + } + + strings.push_back(UniqueStringCopy(text)); + return strings.back().get(); +} + } -- cgit v1.2.3