aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/UniqueString.cxx28
-rw-r--r--src/UniqueString.h10
2 files changed, 29 insertions, 9 deletions
diff --git a/src/UniqueString.cxx b/src/UniqueString.cxx
new file mode 100644
index 000000000..7e289a1a0
--- /dev/null
+++ b/src/UniqueString.cxx
@@ -0,0 +1,28 @@
+// Scintilla source code edit control
+/** @file UniqueString.cxx
+ ** Define an allocator for UniqueString.
+ **/
+// Copyright 2017 by Neil Hodgson <neilh@scintilla.org>
+// The License.txt file describes the conditions under which this software may be distributed.
+
+#include <string_view>
+#include <algorithm>
+#include <memory>
+
+#include "UniqueString.h"
+
+namespace Scintilla {
+
+/// Equivalent to strdup but produces a std::unique_ptr<const char[]> allocation to go
+/// into collections.
+UniqueString UniqueStringCopy(const char *text) {
+ if (!text) {
+ return UniqueString();
+ }
+ const std::string_view sv(text);
+ std::unique_ptr<char[]> upcNew = std::make_unique<char[]>(sv.length() + 1);
+ sv.copy(upcNew.get(), sv.length());
+ return UniqueString(upcNew.release());
+}
+
+}
diff --git a/src/UniqueString.h b/src/UniqueString.h
index 8d95cb1ab..44ba26652 100644
--- a/src/UniqueString.h
+++ b/src/UniqueString.h
@@ -19,15 +19,7 @@ using UniqueString = std::unique_ptr<const char[]>;
/// Equivalent to strdup but produces a std::unique_ptr<const char[]> allocation to go
/// into collections.
-inline UniqueString UniqueStringCopy(const char *text) {
- if (!text) {
- return UniqueString();
- }
- const size_t len = strlen(text);
- char *sNew = new char[len + 1];
- std::copy(text, text + len + 1, sNew);
- return UniqueString(sNew);
-}
+UniqueString UniqueStringCopy(const char *text);
}