X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5a8231ef46dfc249ae17c288841a282570309cfc..0944fceb987def04dc89d03d58c35793d0ecdfed:/include/wx/string.h diff --git a/include/wx/string.h b/include/wx/string.h index 08d4544810..151ca4037a 100644 --- a/include/wx/string.h +++ b/include/wx/string.h @@ -164,7 +164,7 @@ inline int Stricmp(const char *psz1, const char *psz2) // ---------------------------------------------------------------------------- // in both cases we need to define wxStdString -#if wxUSE_STL || defined(wxUSE_STD_STRING) +#if wxUSE_STL || wxUSE_STD_STRING #include "wx/beforestd.h" #include @@ -187,6 +187,7 @@ inline int Stricmp(const char *psz1, const char *psz2) // we don't need an extra ctor from std::string when copy ctor already does // the work #undef wxUSE_STD_STRING + #define wxUSE_STD_STRING 0 #if (defined(__GNUG__) && (__GNUG__ < 3)) || \ (defined(_MSC_VER) && (_MSC_VER <= 1200)) @@ -196,7 +197,8 @@ inline int Stricmp(const char *psz1, const char *psz2) typedef wxStdString wxStringBase; #else // if !wxUSE_STL -#ifndef HAVE_STD_STRING_COMPARE +#if !defined(HAVE_STD_STRING_COMPARE) && \ + (!defined(__WX_SETUP_H__) || wxUSE_STL == 0) #define HAVE_STD_STRING_COMPARE #endif @@ -657,7 +659,7 @@ public: // unconditionally add this ctor as it would make wx lib dependent on // libstdc++ on some Linux versions which is bad, so instead we ask the // client code to define this wxUSE_STD_STRING symbol if they need it -#ifdef wxUSE_STD_STRING +#if wxUSE_STD_STRING wxString(const wxStdString& s) : wxStringBase(s.c_str()) { } #endif // wxUSE_STD_STRING @@ -843,9 +845,16 @@ public: // from a character wxString& operator=(wxChar ch) { return (wxString&)wxStringBase::operator=(ch); } - // from a C string + // from a C string - STL probably will crash on NULL, + // so we need to compensate in that case +#if wxUSE_STL + wxString& operator=(const wxChar *psz) + { if(psz) wxStringBase::operator=(psz); else Clear(); return *this; } +#else wxString& operator=(const wxChar *psz) { return (wxString&)wxStringBase::operator=(psz); } +#endif + #if wxUSE_UNICODE // from wxWCharBuffer wxString& operator=(const wxWCharBuffer& psz) @@ -1177,7 +1186,7 @@ public: { return (wxString&)wxStringBase::assign(first, last); } // string comparison -#ifndef HAVE_STD_STRING_COMPARE +#if !defined(HAVE_STD_STRING_COMPARE) int compare(const wxStringBase& str) const; // comparison with a substring int compare(size_t nStart, size_t nLen, const wxStringBase& str) const; @@ -1266,6 +1275,17 @@ public: { return (wxString&)wxStringBase::operator+=(ch); } }; +// IBM xlC compiler needs these operators to be declared in global scope, +// although this shouldn't be a problem for the other compilers we prefer to +// only do it for it in stable 2.6 branch +#ifdef __IBMCPP__ +wxString WXDLLIMPEXP_BASE operator+(const wxString& string1, const wxString& string2); +wxString WXDLLIMPEXP_BASE operator+(const wxString& string, wxChar ch); +wxString WXDLLIMPEXP_BASE operator+(wxChar ch, const wxString& string); +wxString WXDLLIMPEXP_BASE operator+(const wxString& string, const wxChar *psz); +wxString WXDLLIMPEXP_BASE operator+(const wxChar *psz, const wxString& string); +#endif // __IBMCPP__ + // define wxArrayString, for compatibility #if WXWIN_COMPATIBILITY_2_4 && !wxUSE_STL #include "wx/arrstr.h" @@ -1455,12 +1475,6 @@ inline bool operator!=(const wxCharBuffer& s1, const wxString& s2) { return (s2.Cmp((const char *)s1) != 0); } #endif // wxUSE_UNICODE/!wxUSE_UNICODE -wxString WXDLLIMPEXP_BASE operator+(const wxString& string1, const wxString& string2); -wxString WXDLLIMPEXP_BASE operator+(const wxString& string, wxChar ch); -wxString WXDLLIMPEXP_BASE operator+(wxChar ch, const wxString& string); -wxString WXDLLIMPEXP_BASE operator+(const wxString& string, const wxChar *psz); -wxString WXDLLIMPEXP_BASE operator+(const wxChar *psz, const wxString& string); - #if wxUSE_UNICODE inline wxString operator+(const wxString& string, const wxWCharBuffer& buf) { return string + (const wchar_t *)buf; }