diff options
Diffstat (limited to 'src/UniqueString.cxx')
-rw-r--r-- | src/UniqueString.cxx | 27 |
1 files changed, 27 insertions, 0 deletions
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 <cstring> +#include <vector> #include <algorithm> #include <memory> @@ -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(); +} + } |