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
This commit is contained in:
Václav Slavík
2007-04-16 06:59:04 +00:00
parent ff0d9d83cd
commit 681e441286
3 changed files with 33 additions and 6 deletions

View 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) {}

View 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())
{
}

View 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
}