cmString: add methods append and insert
diff --git a/Source/cmString.hxx b/Source/cmString.hxx
index c346230..f7dcb2b 100644
--- a/Source/cmString.hxx
+++ b/Source/cmString.hxx
@@ -425,6 +425,16 @@
r.append(v.data(), v.size());
return *this = std::move(r);
}
+ template <typename T>
+ typename std::enable_if<AsStringView<T>::value, String&>::type append(T&& s)
+ {
+ string_view v = AsStringView<T>::view(std::forward<T>(s));
+ std::string r;
+ r.reserve(this->size() + v.size());
+ r.assign(this->data(), this->size());
+ r.append(v.data(), v.size());
+ return *this = std::move(r);
+ }
/** Assign to an empty string. */
void clear() { *this = ""_s; }
@@ -432,6 +442,20 @@
/** Insert 'count' copies of 'ch' at position 'index'. */
String& insert(size_type index, size_type count, char ch);
+ /** Insert into the string using any type that implements the
+ AsStringView trait. */
+ template <typename T>
+ typename std::enable_if<AsStringView<T>::value, String&>::type insert(
+ size_type index, T&& s)
+ {
+ string_view v = AsStringView<T>::view(std::forward<T>(s));
+ std::string r;
+ r.reserve(this->size() + v.size());
+ r.assign(this->data(), this->size());
+ r.insert(index, v.data(), v.size());
+ return *this = std::move(r);
+ }
+
/** Erase 'count' characters starting at position 'index'. */
String& erase(size_type index = 0, size_type count = npos);