From 681e44128670bd58c09ff9b42af52666635b19a6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Mon, 16 Apr 2007 06:59:04 +0000 Subject: [PATCH] added wxCStrData::As[W]CharBuf() that doesn't keep converted string in memory for longer than needed git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45495 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/buffer.h | 10 ++++++++-- include/wx/string.h | 25 +++++++++++++++++++++++-- src/common/string.cpp | 4 ++-- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/include/wx/buffer.h b/include/wx/buffer.h index c3d246e7fc..7f61793f04 100644 --- a/include/wx/buffer.h +++ b/include/wx/buffer.h @@ -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 public: typedef wxCharTypeBuffer 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 public: typedef wxCharTypeBuffer wxCharTypeBufferBase; + wxWCharBuffer(const wxCharTypeBufferBase& buf) + : wxCharTypeBufferBase(buf) {} + wxWCharBuffer(const CharType *str = NULL) : wxCharTypeBufferBase(str) {} wxWCharBuffer(size_t len) : wxCharTypeBufferBase(len) {} diff --git a/include/wx/string.h b/include/wx/string.h index fff0784dbb..d60073694c 100644 --- a/include/wx/string.h +++ b/include/wx/string.h @@ -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()) { } diff --git a/src/common/string.cpp b/src/common/string.cpp index 9a3c061224..a398b215e5 100644 --- a/src/common/string.cpp +++ b/src/common/string.cpp @@ -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 } -- 2.45.2