diff options
Diffstat (limited to '')
-rw-r--r-- | src/util/AllocatedString.hxx | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/util/AllocatedString.hxx b/src/util/AllocatedString.hxx index 97975f8b8..c1d844426 100644 --- a/src/util/AllocatedString.hxx +++ b/src/util/AllocatedString.hxx @@ -33,6 +33,7 @@ #include "StringPointer.hxx" #include <utility> +#include <algorithm> /** * A string pointer whose memory is managed by this class. @@ -76,6 +77,22 @@ public: return Donate(p); } + static AllocatedString Duplicate(const_pointer src); + + static AllocatedString Duplicate(const_pointer begin, + const_pointer end) { + auto p = new value_type[end - begin + 1]; + *std::copy(begin, end, p) = 0; + return Donate(p); + } + + static AllocatedString Duplicate(const_pointer begin, + size_t length) { + auto p = new value_type[length]; + *std::copy_n(begin, length, p) = 0; + return Donate(p); + } + AllocatedString &operator=(AllocatedString &&src) { std::swap(value, src.value); return *this; @@ -98,6 +115,10 @@ public: value = nullptr; return result; } + + AllocatedString Clone() const { + return Duplicate(c_str()); + } }; #endif |