no changes, just added a comment explaining the issues involved in doing the conversion in place in wxCStrData::AsChar()

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@48614 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2007-09-09 19:05:20 +00:00
parent 28be59b4ad
commit 2a7431e130

View File

@@ -233,6 +233,27 @@ const char* wxCStrData::AsChar() const
wxString *str = wxConstCast(m_str, wxString);
// convert the string:
//
// FIXME-UTF8: we'd like to do the conversion in the existing buffer (if we
// have it) but it's unfortunately not obvious to implement
// because we don't know how big buffer do we need for the
// given string length (in case of multibyte encodings, e.g.
// ISO-2022-JP or UTF-8 when internal representation is wchar_t)
//
// One idea would be to store more than just m_convertedToChar
// in wxString: then we could record the length of the string
// which was converted the last time and try to reuse the same
// buffer if the current length is not greater than it (this
// could still fail because string could have been modified in
// place but it would work most of the time, so we'd do it and
// only allocate the new buffer if in-place conversion returned
// an error). We could also store a bit saying if the string
// was modified since the last conversion (and update it in all
// operation modifying the string, of course) to avoid unneeded
// consequential conversions. But both of these ideas require
// adding more fields to wxString and require profiling results
// to be sure that we really gain enough from them to justify
// doing it.
wxCharBuffer buf(str->mb_str());
// if it failed, return empty string and not NULL to avoid crashes in code
@@ -241,7 +262,6 @@ const char* wxCStrData::AsChar() const
if ( !buf )
return "";
// FIXME-UTF8: do the conversion in-place in the existing buffer
if ( str->m_convertedToChar &&
strlen(buf) == strlen(str->m_convertedToChar) )
{