X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c16471b6e8b08bd7d02c4c4988a06f46b83634e1..1169a91932273bc84c23ed9dbd0a2da064d59d66:/include/wx/string.h?ds=sidebyside diff --git a/include/wx/string.h b/include/wx/string.h index 0d8bcc184c..eed7c84c39 100644 --- a/include/wx/string.h +++ b/include/wx/string.h @@ -18,7 +18,7 @@ #ifndef _WX_WXSTRINGH__ #define _WX_WXSTRINGH__ -#if defined(__GNUG__) && !defined(__APPLE__) +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma interface "string.h" #endif @@ -32,10 +32,6 @@ #include #endif -#ifdef __EMX__ - #include -#endif - #if defined(__VISAGECPP__) && __IBMCPP__ >= 400 // problem in VACPP V4 with including stdlib.h multiple times // strconv includes it anyway @@ -177,7 +173,7 @@ inline const wxString& wxGetEmptyString() { return *(wxString *)&wxEmptyString; #include "wx/afterstd.h" #if wxUSE_UNICODE - #if HAVE_STD_WSTRING + #ifdef HAVE_STD_WSTRING typedef std::wstring wxStringBase; #else typedef std::basic_string wxStringBase; @@ -220,7 +216,7 @@ struct WXDLLIMPEXP_BASE wxStringData // VC++ will refuse to inline Unlock but profiling shows that it is wrong #if defined(__VISUALC__) && (__VISUALC__ >= 1200) - __forceinline + __forceinline #endif // VC++ free must take place in same DLL as allocation when using non dll // run-time library (e.g. Multithreaded instead of Multithreaded DLL) @@ -243,6 +239,9 @@ class WXDLLIMPEXP_BASE wxStringBase #if !wxUSE_STL friend class WXDLLIMPEXP_BASE wxArrayString; #endif +public : + // an 'invalid' value for string index, moved to this place due to a CW bug + static const size_t npos; protected: // points to data preceded by wxStringData structure with ref count info wxChar *m_pchData; @@ -291,9 +290,6 @@ public: typedef value_type *iterator; typedef const value_type *const_iterator; - // an 'invalid' value for string index - static const size_t npos; - // constructors and destructor // ctor for an empty string wxStringBase() { Init(); } @@ -335,8 +331,21 @@ public: wxStringBase(const void *pStart, const void *pEnd); // dtor is not virtual, this class must not be inherited from! - ~wxStringBase() { GetStringData()->Unlock(); } + ~wxStringBase() + { +#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) +#endif // overloaded assignment // from another wxString wxStringBase& operator=(const wxStringBase& stringSrc); @@ -505,11 +514,9 @@ public: size_t find(const wxChar* sz, size_t nStart = 0, size_t n = npos) const; #endif // VC++ 1.5 - // Gives a duplicate symbol (presumably a case-insensitivity problem) -#if !defined(__BORLANDC__) // find the first occurence of character ch after nStart size_t find(wxChar ch, size_t nStart = 0) const; -#endif + // rfind() family is exactly like find() but works right to left // as find, but from the end @@ -529,6 +536,7 @@ public: { return find_first_of(str.c_str(), nStart); } // same as above size_t find_first_of(const wxChar* sz, size_t nStart = 0) const; + size_t find_first_of(const wxChar* sz, size_t nStart, size_t n) const; // same as find(char, size_t) size_t find_first_of(wxChar c, size_t nStart = 0) const { return find(c, nStart); } @@ -537,6 +545,7 @@ public: { return find_last_of(str.c_str(), nStart); } // same as above size_t find_last_of (const wxChar* sz, size_t nStart = npos) const; + size_t find_last_of(const wxChar* sz, size_t nStart, size_t n) const; // same as above size_t find_last_of(wxChar c, size_t nStart = npos) const { return rfind(c, nStart); } @@ -548,13 +557,15 @@ public: { return find_first_not_of(str.c_str(), nStart); } // same as above size_t find_first_not_of(const wxChar* sz, size_t nStart = 0) const; + size_t find_first_not_of(const wxChar* sz, size_t nStart, size_t n) const; // same as above size_t find_first_not_of(wxChar ch, size_t nStart = 0) const; // as strcspn() size_t find_last_not_of(const wxStringBase& str, size_t nStart = npos) const - { return find_first_not_of(str.c_str(), nStart); } + { return find_last_not_of(str.c_str(), nStart); } // same as above size_t find_last_not_of(const wxChar* sz, size_t nStart = npos) const; + size_t find_last_not_of(const wxChar* sz, size_t nStart, size_t n) const; // same as above size_t find_last_not_of(wxChar ch, size_t nStart = npos) const;