X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fb25206791c8324c946fb724f21c913b5f3b295e..86ac84b8ce086e6bbda58f422d41f84268606e35:/include/wx/stringimpl.h?ds=sidebyside diff --git a/include/wx/stringimpl.h b/include/wx/stringimpl.h index 7a9adb99bf..08880f3ebe 100644 --- a/include/wx/stringimpl.h +++ b/include/wx/stringimpl.h @@ -53,7 +53,18 @@ extern WXDLLIMPEXP_DATA_BASE(const wxStringCharType*) wxEmptyStringImpl; // deal with STL/non-STL/non-STL-but-wxUSE_STD_STRING // ---------------------------------------------------------------------------- -#define wxUSE_STL_BASED_WXSTRING wxUSE_STL +// using STL implies using std::string +#if wxUSE_STL + #undef wxUSE_STD_STRING + #define wxUSE_STD_STRING 1 +#endif + +// we use STL-based string internally if we use std::string at all now, there +// should be no reason to prefer our internal implement but if you really need +// it you can predefine wxUSE_STL_BASED_WXSTRING as 0 when building the library +#ifndef wxUSE_STL_BASED_WXSTRING + #define wxUSE_STL_BASED_WXSTRING wxUSE_STD_STRING +#endif // in both cases we need to define wxStdString #if wxUSE_STL_BASED_WXSTRING || wxUSE_STD_STRING @@ -83,8 +94,10 @@ extern WXDLLIMPEXP_DATA_BASE(const wxStringCharType*) wxEmptyStringImpl; #undef wxUSE_STD_STRING #define wxUSE_STD_STRING 1 + // the versions of std::string included with gcc 2.95 and VC6 (for which + // _MSC_VER == 1200) and eVC4 (_MSC_VER == 1201) lack clear() method #if (defined(__GNUG__) && (__GNUG__ < 3)) || \ - (defined(_MSC_VER) && (_MSC_VER <= 1200)) + !wxCHECK_VISUALC_VERSION(7) || defined(__EVC4__) #define wxSTRING_BASE_HASNT_CLEAR #endif @@ -328,23 +341,24 @@ public: { return wxStdString(c_str(), length()); } #endif +#if defined(__VISUALC__) && (__VISUALC__ >= 1200) + // disable warning about Unlock() below not being inlined (first, it + // seems to be inlined nevertheless and second, even if it isn't, there + // is nothing we can do about this + #pragma warning(push) + #pragma warning (disable:4714) +#endif // dtor is not virtual, this class must not be inherited from! ~wxStringImpl() { -#if defined(__VISUALC__) && (__VISUALC__ >= 1200) - //RN - according to the above VC++ does indeed inline this, - //even though it spits out two warnings - #pragma warning (disable:4714) -#endif - GetStringData()->Unlock(); } #if defined(__VISUALC__) && (__VISUALC__ >= 1200) - //re-enable inlining warning - #pragma warning (default:4714) + #pragma warning(pop) #endif + // overloaded assignment // from another wxString wxStringImpl& operator=(const wxStringImpl& stringSrc); @@ -371,9 +385,11 @@ public: // lib.string.access // return the character at position n + value_type operator[](size_type n) const { return m_pchData[n]; } value_type at(size_type n) const { wxASSERT_VALID_INDEX( n ); return m_pchData[n]; } // returns the writable character at position n + reference operator[](size_type n) { CopyBeforeWrite(); return m_pchData[n]; } reference at(size_type n) { wxASSERT_VALID_INDEX( n );