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