// deal with STL/non-STL/non-STL-but-wxUSE_STD_STRING
// ----------------------------------------------------------------------------
+// FIXME-UTF8: using std::string as wxString base class is currently broken,
+// so we use the standard wxString with std::string conversion
+// enabled, this is API-compatible.
+#define wxUSE_STL_BASED_WXSTRING 0
+#if wxUSE_STL
+ #undef wxUSE_STD_STRING
+ #define wxUSE_STD_STRING 1
+#endif
+//#define wxUSE_STL_BASED_WXSTRING wxUSE_STL
+
// in both cases we need to define wxStdString
-#if wxUSE_STL || wxUSE_STD_STRING
+#if wxUSE_STL_BASED_WXSTRING || wxUSE_STD_STRING
#include "wx/beforestd.h"
#include <string>
#endif // need <string>
-#if wxUSE_STL
+#if wxUSE_STL_BASED_WXSTRING
// we don't need an extra ctor from std::string when copy ctor already does
// the work
#endif
typedef wxStdString wxStringBase;
-#else // if !wxUSE_STL
+#else // if !wxUSE_STL_BASED_WXSTRING
#if !defined(HAVE_STD_STRING_COMPARE) && \
- (!defined(__WX_SETUP_H__) || wxUSE_STL == 0)
+ (!defined(__WX_SETUP_H__) || wxUSE_STL_BASED_WXSTRING == 0)
#define HAVE_STD_STRING_COMPARE
#endif
wxStringBase& operator+=(wchar_t ch) { return append(1, ch); }
};
-#endif // !wxUSE_STL
+#endif // !wxUSE_STL_BASED_WXSTRING
// ----------------------------------------------------------------------------
// wxCStrData
{ return (wxString&)wxStringBase::operator=(wxUniChar(ch)); }
// from a C string - STL probably will crash on NULL,
// so we need to compensate in that case
-#if wxUSE_STL
+#if wxUSE_STL_BASED_WXSTRING
wxString& operator=(const wxChar *psz)
{ if(psz) wxStringBase::operator=(psz); else Clear(); return *this; }
#else
wxString& operator+=(wchar_t ch) { return *this += wxUniChar(ch); }
private:
-#if !wxUSE_STL
+#if !wxUSE_STL_BASED_WXSTRING
// helpers for wxStringBuffer and wxStringBufferLength
wxChar *DoGetWriteBuf(size_t nLen);
void DoUngetWriteBuf();
{ return wxUniChar(ch) + string; }
-#if wxUSE_STL
+#if wxUSE_STL_BASED_WXSTRING
// return an empty wxString (not very useful with wxUSE_STL == 1)
inline const wxString wxGetEmptyString() { return wxString(); }
-#else // !wxUSE_STL
+#else // !wxUSE_STL_BASED_WXSTRING
// return an empty wxString (more efficient than wxString() here)
inline const wxString& wxGetEmptyString()
{
return *(wxString *)&wxEmptyString;
}
-#endif // wxUSE_STL/!wxUSE_STL
+#endif // wxUSE_STL_BASED_WXSTRING/!wxUSE_STL_BASED_WXSTRING
// ----------------------------------------------------------------------------
// wxStringBuffer: a tiny class allowing to get a writable pointer into string
// ----------------------------------------------------------------------------
-#if wxUSE_STL
+#if wxUSE_STL_BASED_WXSTRING
class WXDLLIMPEXP_BASE wxStringBuffer
{
DECLARE_NO_COPY_CLASS(wxStringBufferLength)
};
-#else // if !wxUSE_STL
+#else // if !wxUSE_STL_BASED_WXSTRING
class WXDLLIMPEXP_BASE wxStringBuffer
{
DECLARE_NO_COPY_CLASS(wxStringBufferLength)
};
-#endif // !wxUSE_STL
+#endif // !wxUSE_STL_BASED_WXSTRING
// ---------------------------------------------------------------------------
// wxString comparison functions: operator versions are always case sensitive
// ---------------------------------------------------------------------------
-// note that when wxUSE_STL == 1 the comparison operators taking std::string
-// are used and defining them also for wxString would only result in
-// compilation ambiguities when comparing std::string and wxString
-#if !wxUSE_STL
+// note that when wxUSE_STL_BASED_WXSTRING == 1 the comparison operators taking
+// std::string are used and defining them also for wxString would only result
+// in compilation ambiguities when comparing std::string and wxString
+#if !wxUSE_STL_BASED_WXSTRING
inline bool operator==(const wxString& s1, const wxString& s2)
{ return (s1.Len() == s2.Len()) && (s1.Cmp(s2) == 0); }
{ return (const char *)buf + string; }
#endif // wxUSE_UNICODE/!wxUSE_UNICODE
-#endif // !wxUSE_STL
+#endif // !wxUSE_STL_BASED_WXSTRING
// comparison with char (those are not defined by std::[w]string and so should
// be always available)
// static class variables definition
// ---------------------------------------------------------------------------
-#if !wxUSE_STL
+#if !wxUSE_STL_BASED_WXSTRING
//According to STL _must_ be a -1 size_t
const size_t wxStringBase::npos = (size_t) -1;
#endif
// static data
// ----------------------------------------------------------------------------
-#if wxUSE_STL
+#if wxUSE_STL_BASED_WXSTRING
extern const wxChar WXDLLIMPEXP_BASE *wxEmptyString = _T("");
#define STATISTICS_ADD(av, val)
#endif // WXSTRING_STATISTICS
-#if !wxUSE_STL
+#if !wxUSE_STL_BASED_WXSTRING
// ===========================================================================
// wxStringData class deallocation
return true;
}
-#endif // !wxUSE_STL
+#endif // !wxUSE_STL_BASED_WXSTRING
-#if !wxUSE_STL || !defined(HAVE_STD_STRING_COMPARE)
+#if !wxUSE_STL_BASED_WXSTRING || !defined(HAVE_STD_STRING_COMPARE)
-#if !wxUSE_STL
+#if !wxUSE_STL_BASED_WXSTRING
#define STRINGCLASS wxStringBase
#else
#define STRINGCLASS wxString
#undef STRINGCLASS
-#endif // !wxUSE_STL || !defined(HAVE_STD_STRING_COMPARE)
+#endif // !wxUSE_STL_BASED_WXSTRING || !defined(HAVE_STD_STRING_COMPARE)
// ===========================================================================
// wxString class core
return tmp.length() == length();
}
-#if !wxUSE_STL
+#if !wxUSE_STL_BASED_WXSTRING
// get the pointer to writable buffer of (at least) nLen bytes
wxChar *wxString::DoGetWriteBuf(size_t nLen)
{
wxString operator+(const wxString& str1, const wxString& str2)
{
-#if !wxUSE_STL
+#if !wxUSE_STL_BASED_WXSTRING
wxASSERT( str1.GetStringData()->IsValid() );
wxASSERT( str2.GetStringData()->IsValid() );
#endif
wxString operator+(const wxString& str, wxUniChar ch)
{
-#if !wxUSE_STL
+#if !wxUSE_STL_BASED_WXSTRING
wxASSERT( str.GetStringData()->IsValid() );
#endif
wxString operator+(wxUniChar ch, const wxString& str)
{
-#if !wxUSE_STL
+#if !wxUSE_STL_BASED_WXSTRING
wxASSERT( str.GetStringData()->IsValid() );
#endif
wxString operator+(const wxString& str, const wxChar *psz)
{
-#if !wxUSE_STL
+#if !wxUSE_STL_BASED_WXSTRING
wxASSERT( str.GetStringData()->IsValid() );
#endif
wxString operator+(const wxChar *psz, const wxString& str)
{
-#if !wxUSE_STL
+#if !wxUSE_STL_BASED_WXSTRING
wxASSERT( str.GetStringData()->IsValid() );
#endif