diff options
author | Max Kellermann <max@duempel.org> | 2015-06-25 22:43:04 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2015-06-25 23:44:16 +0200 |
commit | 037d1d9ad14969947b1a9456dc716b6a22021d29 (patch) | |
tree | 77e73978e036c7d9328ec59c46bc9b76cf592299 /src/util/AllocatedString.hxx | |
parent | 619ef2b3418668430f741aaed79aa4f366aba233 (diff) | |
download | mpd-037d1d9ad14969947b1a9456dc716b6a22021d29.tar.gz mpd-037d1d9ad14969947b1a9456dc716b6a22021d29.tar.xz mpd-037d1d9ad14969947b1a9456dc716b6a22021d29.zip |
util/AllocatedString: add methods Duplicate(), Clone()
Diffstat (limited to 'src/util/AllocatedString.hxx')
-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 |