]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/string.h
Applied patch [ 832096 ] Final separation for GUI and console for Open Watcom
[wxWidgets.git] / include / wx / string.h
index cddfe30b9a81804d6294b06c7f175c0ee1d0b355..eed7c84c395150407518e582826d5bb5d908f66a 100644 (file)
@@ -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
 
     #include <ctype.h>
 #endif
 
-#ifdef __EMX__
-    #include <std.h>
-#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<wxChar> 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;
 
@@ -771,11 +782,11 @@ public:
 #ifndef wxSIZE_T_IS_UINT
     // operator version of GetChar
     wxChar operator[](unsigned int n) const
-      { return operator[](n); }
+      { return wxStringBase::operator[](n); }
 
     // operator version of GetWriteableChar
     wxChar& operator[](unsigned int n)
-      { return operator[](n); }
+      { return wxStringBase::operator[](n); }
 #endif // size_t != unsigned int
 
     // implicit conversion to C string