From 3debda34b8aa21a770142a055b8fa7e4a8a7355f Mon Sep 17 00:00:00 2001 From: Neil Date: Sun, 21 May 2017 23:08:04 +1000 Subject: Make SparseVector work with move-only types. Define UniqueString as a move-only string and use in a SparseVector for ContractionState. Remove SparseVector method specializations that are no longer needed. --- src/UniqueString.h | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/UniqueString.h (limited to 'src/UniqueString.h') diff --git a/src/UniqueString.h b/src/UniqueString.h new file mode 100644 index 000000000..07da0f171 --- /dev/null +++ b/src/UniqueString.h @@ -0,0 +1,34 @@ +// Scintilla source code edit control +/** @file UniqueString.h + ** Define UniqueString, a unique_ptr based string type for storage in containers + ** and an allocator for UniqueString. + **/ +// Copyright 2017 by Neil Hodgson +// The License.txt file describes the conditions under which this software may be distributed. + +#ifndef UNIQUESTRING_H +#define UNIQUESTRING_H + +#ifdef SCI_NAMESPACE +namespace Scintilla { +#endif + +using UniqueString = std::unique_ptr; + +/// Equivalent to strdup but produces a std::unique_ptr 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); +} + +#ifdef SCI_NAMESPACE +} +#endif + +#endif -- cgit v1.2.3