always return (owned or non-owned, depending on build) wxScopedCharBuffer from utf8_s...
authorVáclav Slavík <vslavik@fastmail.fm>
Mon, 30 Mar 2009 18:28:42 +0000 (18:28 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Mon, 30 Mar 2009 18:28:42 +0000 (18:28 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@59945 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/doxygen/overviews/unicode.h
include/wx/buffer.h
include/wx/ipcbase.h
include/wx/string.h
interface/wx/string.h
samples/sockets/client.cpp
src/common/sckaddr.cpp
src/gtk/print.cpp

index be0d550b9bb501fa91ed888d78599e170d476f42..a84dc50aa14aa24a891795771d90039c2f77af37 100644 (file)
@@ -372,19 +372,13 @@ const char *p = s.ToUTF8();
 puts(p); // or call any other function taking const char *
 @endcode
 does @b not work because the temporary buffer returned by wxString::ToUTF8() is
-destroyed and @c p is left pointing nowhere. To correct this you may use
+destroyed and @c p is left pointing nowhere. To correct this you should use
 @code
-wxCharBuffer p(s.ToUTF8());
+const wxScopedCharBuffer p(s.ToUTF8());
 puts(p);
 @endcode
-which does work but results in an unnecessary copy of string data in the build
-configurations when wxString::ToUTF8() returns the pointer to internal string buffer.
-If this inefficiency is important you may write
-@code
-const wxUTF8Buf p(s.ToUTF8());
-puts(p);
-@endcode
-where @c wxUTF8Buf is the type corresponding to the real return type of wxString::ToUTF8().
+which does work.
+
 Similarly, wxWX2WCbuf can be used for the return type of wxString::wc_str().
 But, once again, none of these cryptic types is really needed if you just pass
 the return value of any of the functions mentioned in this section to another
index f3c4e34f4327304f1a8299c726694b48a5b1fcd1..9dc93398294eda9692bef7a492b051c0cc6363f1 100644 (file)
@@ -427,13 +427,6 @@ typedef wxWritableCharTypeBuffer<wchar_t> wxWritableWCharBuffer;
     #define wxWX2WCbuf wxWCharBuffer
 #endif // Unicode/ANSI
 
-// type of the value returned by wxString::utf8_str()
-#if wxUSE_UNICODE_UTF8
-    #define wxUTF8Buf char *
-#else
-    #define wxUTF8Buf wxCharBuffer
-#endif
-
 // ----------------------------------------------------------------------------
 // A class for holding growable data buffers (not necessarily strings)
 // ----------------------------------------------------------------------------
index 7619671f104ecae8ea168f9bbf9bd450a6073628..3918547141ddae0bdaf0a57de84810e7daab39f7 100644 (file)
@@ -72,7 +72,7 @@ public:
                                               : size, wxIPC_UNICODETEXT); }
   bool Execute(const wxString& s)
   {
-      const wxUTF8Buf buf = s.utf8_str();
+      const wxScopedCharBuffer buf = s.utf8_str();
       return DoExecute(buf, strlen(buf) + 1, wxIPC_UTF8TEXT);
   }
   bool Execute(const wxCStrData& cs)
@@ -94,7 +94,7 @@ public:
                                        : size, wxIPC_UNICODETEXT); }
   bool Poke(const wxString& item, const wxString s)
   {
-      const wxUTF8Buf buf = s.utf8_str();
+      const wxScopedCharBuffer buf = s.utf8_str();
       return DoPoke(item, buf,  strlen(buf) + 1, wxIPC_UTF8TEXT);
   }
   bool Poke(const wxString& item, const wxCStrData& cs)
@@ -116,7 +116,7 @@ public:
                                          : size, wxIPC_UNICODETEXT); }
   bool Advise(const wxString& item, const wxString s)
   {
-      const wxUTF8Buf buf = s.utf8_str();
+      const wxScopedCharBuffer buf = s.utf8_str();
       return DoAdvise(item, buf,  strlen(buf) + 1, wxIPC_UTF8TEXT);
   }
   bool Advise(const wxString& item, const wxCStrData& cs)
index 2ebce253632e9d2ad5f7c1ee3e891800472bd5af..5b29a2546dd91bcf2c97d4de04cde10b97a5aaa7 100644 (file)
@@ -1710,8 +1710,10 @@ public:
         return FromImpl(wxStringImpl(utf8, len));
     }
 
-    const char* utf8_str() const { return wx_str(); }
-    const char* ToUTF8() const { return wx_str(); }
+    const wxScopedCharBuffer utf8_str() const
+        { return wxCharBuffer::CreateNonOwned(wx_str()); }
+    const wxScopedCharBuffer ToUTF8() const
+        { return wxCharBuffer::CreateNonOwned(wx_str()); }
 
     // this function exists in UTF-8 build only and returns the length of the
     // internal UTF-8 representation
index 3056895ba79d9b87e627a7baa4219b5e74be89a4..1c43722bea617f7329f9629dbc2e21aaebf69e24 100644 (file)
@@ -420,12 +420,7 @@ public:
 
         @see wc_str(), c_str(), mb_str()
     */
-    const char* utf8_str() const;
-    
-    /**
-        @overload
-    */
-    const wxCharBuffer utf8_str() const;
+    const wxScopedCharBuffer utf8_str() const;
 
     /**
         Converts the strings contents to the wide character represention
@@ -497,12 +492,7 @@ public:
     /**
         Same as utf8_str().
     */
-    const char* ToUTF8() const;
-
-    /**
-        @overload
-    */
-    const wxCharBuffer ToUTF8() const;
+    const wxScopedCharBuffer ToUTF8() const;
 
     //@}
 
index a50cf54286828213628ca267cdda273585e89129..d078e89428f6c569959cf1a33cf56f51447adb2d 100644 (file)
@@ -479,7 +479,7 @@ void MyFrame::OnTest2(wxCommandEvent& WXUNUSED(event))
     _("Test 2 ..."),
     _("Yes I like wxWidgets!"));
 
-  const wxUTF8Buf msg1(s.utf8_str());
+  const wxScopedCharBuffer msg1(s.utf8_str());
   size_t len  = wxStrlen(msg1) + 1;
   wxCharBuffer msg2(wxStrlen(msg1));
 
index b706132e5c7201b5a9808422b5539e5bb60f9114..9e21624fed06df1fd95b737a4949e0c62e286c9c 100644 (file)
@@ -508,7 +508,7 @@ bool wxSockAddressImpl::SetHostName4(const wxString& name)
     if ( !addr )
         return false;
 
-    const wxUTF8Buf namebuf(name.utf8_str());
+    const wxScopedCharBuffer namebuf(name.utf8_str());
 
     // first check if this is an address in quad dotted notation
 #if defined(HAVE_INET_ATON)
@@ -695,7 +695,7 @@ bool wxSockAddressImpl::SetPath(const wxString& path)
     if ( !addr )
         return false;
 
-    const wxUTF8Buf buf(path.utf8_str());
+    const wxScopedCharBuffer buf(path.utf8_str());
     if ( strlen(buf) >= UNIX_PATH_MAX )
         return false;
 
index 4c77554f19378b9181a299faaf2a87f505904095..563e214334dc8e0e78db1edbbe75475a4ead0cb8 100644 (file)
@@ -1700,7 +1700,7 @@ void wxGtkPrinterDCImpl::DoDrawRotatedText(const wxString& text, wxCoord x, wxCo
 
     bool underlined = m_font.Ok() && m_font.GetUnderlined();
 
-    const wxUTF8Buf data = text.utf8_str();
+    const wxScopedCharBuffer data = text.utf8_str();
 
     size_t datalen = strlen(data);
     pango_layout_set_text( m_layout, data, datalen);
@@ -2102,7 +2102,7 @@ void wxGtkPrinterDCImpl::DoGetTextExtent(const wxString& string, wxCoord *width,
     cairo_scale(m_cairo, m_scaleX, m_scaleY);
 
     // Set layout's text
-    const wxUTF8Buf dataUTF8 = string.utf8_str();
+    const wxScopedCharBuffer dataUTF8 = string.utf8_str();
 
     gint oldSize=0;
     if ( theFont )