diff --git a/src/lib/icu/Compare.hxx b/src/lib/icu/Compare.hxx index 6f4841739..3110d16aa 100644 --- a/src/lib/icu/Compare.hxx +++ b/src/lib/icu/Compare.hxx @@ -38,11 +38,11 @@ class IcuCompare { #ifdef _WIN32 /* Windows API functions work with wchar_t strings, so let's cache the MultiByteToWideChar() result for performance */ - BasicAllocatedString needle; -#else - AllocatedString needle; + using AllocatedString = BasicAllocatedString; #endif + AllocatedString needle; + public: IcuCompare():needle(nullptr) {} @@ -50,12 +50,12 @@ public: IcuCompare(const IcuCompare &src) noexcept :needle(src - ? src.needle.Clone() + ? AllocatedString(src.needle) : nullptr) {} IcuCompare &operator=(const IcuCompare &src) noexcept { needle = src - ? src.needle.Clone() + ? AllocatedString(src.needle) : nullptr; return *this; } diff --git a/src/util/AllocatedString.hxx b/src/util/AllocatedString.hxx index e977712fc..9b2c5812a 100644 --- a/src/util/AllocatedString.hxx +++ b/src/util/AllocatedString.hxx @@ -71,6 +71,9 @@ public: explicit BasicAllocatedString(const_pointer src) :value(Duplicate(src)) {} + BasicAllocatedString(const BasicAllocatedString &src) noexcept + :BasicAllocatedString(Duplicate(src.value)) {} + BasicAllocatedString(BasicAllocatedString &&src) noexcept :value(src.Steal()) {} @@ -137,10 +140,6 @@ public: return std::exchange(value, nullptr); } - BasicAllocatedString Clone() const { - return BasicAllocatedString(Duplicate(*this)); - } - private: static pointer Duplicate(string_view src) { auto p = new value_type[src.size() + 1]; @@ -150,7 +149,7 @@ private: static pointer Duplicate(const_pointer src) { return src != nullptr - ? Duplicate(std::string_view(src)) + ? Duplicate(string_view(src)) : nullptr; } };