]> git.saurik.com Git - wxWidgets.git/commitdiff
added wxCStrData::As[W]CharBuf() that doesn't keep converted string in memory for...
authorVáclav Slavík <vslavik@fastmail.fm>
Mon, 16 Apr 2007 06:59:04 +0000 (06:59 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Mon, 16 Apr 2007 06:59:04 +0000 (06:59 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45495 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/buffer.h
include/wx/string.h
src/common/string.cpp

index c3d246e7fc46b18e5edc70260f2083c08dc859d0..7f61793f04eaa6364471ab6805552a2496988215 100644 (file)
@@ -45,10 +45,10 @@ public:
         m_str[len] = (CharType)0;
     }
 
-    static wxCharTypeBuffer CreateNonOwned(const CharType *str)
+    static const wxCharTypeBuffer CreateNonOwned(const CharType *str)
     {
         wxCharTypeBuffer buf;
-        buf.m_str = str;
+        buf.m_str = wx_const_cast(CharType*, str);
         buf.m_owned = false;
         return buf;
     }
@@ -157,6 +157,9 @@ class WXDLLIMPEXP_BASE wxCharBuffer : public wxCharTypeBuffer<char>
 public:
     typedef wxCharTypeBuffer<char> wxCharTypeBufferBase;
 
+    wxCharBuffer(const wxCharTypeBufferBase& buf)
+        : wxCharTypeBufferBase(buf) {}
+
     wxCharBuffer(const CharType *str = NULL) : wxCharTypeBufferBase(str) {}
     wxCharBuffer(size_t len) : wxCharTypeBufferBase(len) {}
 
@@ -169,6 +172,9 @@ class WXDLLIMPEXP_BASE wxWCharBuffer : public wxCharTypeBuffer<wchar_t>
 public:
     typedef wxCharTypeBuffer<wchar_t> wxCharTypeBufferBase;
 
+    wxWCharBuffer(const wxCharTypeBufferBase& buf)
+        : wxCharTypeBufferBase(buf) {}
+
     wxWCharBuffer(const CharType *str = NULL) : wxCharTypeBufferBase(str) {}
     wxWCharBuffer(size_t len) : wxCharTypeBufferBase(len) {}
 
index fff0784dbbd44348fc1411ff6dbb3b5a62ffebda..d60073694c437e1321546d234cde87c56ff8a82c 100644 (file)
@@ -212,6 +212,9 @@ public:
 
     operator const void*() const { return AsChar(); }
 
+    inline const wxCharBuffer AsCharBuf() const;
+    inline const wxWCharBuffer AsWCharBuf() const;
+
     inline wxString AsString() const;
 
     // allow expressions like "c_str()[0]":
@@ -2574,6 +2577,24 @@ inline const char* wxCStrData::AsChar() const
 }
 #endif // !wxUSE_UNICODE
 
+inline const wxCharBuffer wxCStrData::AsCharBuf() const
+{
+#if !wxUSE_UNICODE
+    return wxCharBuffer::CreateNonOwned(AsChar());
+#else
+    return AsString().mb_str();
+#endif
+}
+
+inline const wxWCharBuffer wxCStrData::AsWCharBuf() const
+{
+#if wxUSE_UNICODE_WCHAR
+    return wxWCharBuffer::CreateNonOwned(AsWChar());
+#else
+    return AsString().wc_str();
+#endif
+}
+
 inline wxString wxCStrData::AsString() const
 {
     if ( m_offset == 0 )
@@ -2617,12 +2638,12 @@ inline size_t operator-(const wchar_t *p, const wxCStrData& cs)
 
 // FIXME-UTF8: move this to buffer.h
 inline wxCharBuffer::wxCharBuffer(const wxCStrData& cstr)
-                    : wxCharTypeBufferBase(cstr.AsChar())
+                    : wxCharTypeBufferBase(cstr.AsCharBuf())
 {
 }
 
 inline wxWCharBuffer::wxWCharBuffer(const wxCStrData& cstr)
-                    : wxCharTypeBufferBase(cstr.AsWChar())
+                    : wxCharTypeBufferBase(cstr.AsWCharBuf())
 {
 }
 
index 9a3c061224f4d2ca409ec82f8f912606db98356a..a398b215e5fcd07846fa6f6e1c9c813be1603ffd 100644 (file)
@@ -80,9 +80,9 @@ wxSTD ostream& operator<<(wxSTD ostream& os, const wxCStrData& str)
 {
 // FIXME-UTF8: always, not only if wxUSE_UNICODE
 #if wxUSE_UNICODE && !defined(__BORLANDC__)
-    return os << str.AsWChar();
+    return os << (const wchar_t*)str.AsWCharBuf();
 #else
-    return os << str.AsChar();
+    return os << (const char*)str.AsCharBuf();
 #endif
 }