]> git.saurik.com Git - wxWidgets.git/commitdiff
added wxString::Clone() and made wxString(wxCStrData) ctor make deep copy too
authorVáclav Slavík <vslavik@fastmail.fm>
Thu, 24 Apr 2008 07:16:48 +0000 (07:16 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Thu, 24 Apr 2008 07:16:48 +0000 (07:16 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@53327 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/string.h
interface/string.h

index c5283522d57be2d9b25e3fee888ec3bd9e7f9618..20dd33255028220532642b04fa8044fc438d622e 100644 (file)
@@ -953,8 +953,11 @@ public:
   wxString(const wxWCharBuffer& buf)
     { assign(buf.data()); } // FIXME-UTF8: fix for embedded NUL and buffer length
 
+    // NB: this version uses m_impl.c_str() to force making a copy of the
+    //     string, so that "wxString(str.c_str())" idiom for passing strings
+    //     between threads works
   wxString(const wxCStrData& cstr)
-      : m_impl(cstr.AsString().m_impl) { }
+      : m_impl(cstr.AsString().m_impl.c_str()) { }
 
     // as we provide both ctors with this signature for both char and unsigned
     // char string, we need to provide one for wxCStrData to resolve ambiguity
@@ -1014,6 +1017,13 @@ public:
   #endif
 #endif // wxUSE_STL
 
+  wxString Clone() const
+  {
+      // make a deep copy of the string, i.e. the returned string will have
+      // ref count = 1 with refcounted implementation
+      return wxString::FromImpl(wxStringImpl(m_impl.c_str(), m_impl.length()));
+  }
+
   // first valid index position
   const_iterator begin() const { return const_iterator(this, m_impl.begin()); }
   iterator begin() { return iterator(this, m_impl.begin()); }
index bae298ac935cf385fcb8b98895460353abac6fce..ed4ce9bba3ca9391f5a518666f3eaf210e29484d 100644 (file)
@@ -261,6 +261,20 @@ public:
     */
     void Clear();
 
+    /**
+        Returns a deep copy of the string.
+
+        That is, the returned string is guaranteed to not share data with this
+        string when using reference-counted wxString implementation.
+
+        This method is primarily useful for passing strings between threads
+        (because wxString is not thread-safe). Unlike creating a copy using
+        @c wxString(c_str()), Clone() handles embedded NULs correctly.
+
+        @since 2.9.0
+     */
+    wxString Clone() const;
+
     //@{
     /**
         Case-sensitive comparison.