]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/string.h
Fixes for Unicode build.
[wxWidgets.git] / include / wx / string.h
index d402585c46ee63c096b980705d663b1f75ddac4b..6667f8fae8715f5b7d84e784a6c0f88ef1956895 100644 (file)
@@ -1,5 +1,5 @@
 ///////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////
-// Name:        string.h
+// Name:        wx/string.h
 // Purpose:     wxString and wxArrayString classes
 // Author:      Vadim Zeitlin
 // Modified by:
 // Purpose:     wxString and wxArrayString classes
 // Author:      Vadim Zeitlin
 // Modified by:
@@ -11,7 +11,7 @@
 
 /*
     Efficient string class [more or less] compatible with MFC CString,
 
 /*
     Efficient string class [more or less] compatible with MFC CString,
-    wxWindows version 1 wxString and std::string and some handy functions
+    wxWidgets version 1 wxString and std::string and some handy functions
     missing from string.h.
 */
 
     missing from string.h.
 */
 
@@ -47,9 +47,9 @@
 #  include <stdlib.h>
 #endif
 
 #  include <stdlib.h>
 #endif
 
-#ifdef HAVE_STRINGS_H
+#ifdef HAVE_STRCASECMP_IN_STRINGS_H
     #include <strings.h>    // for strcasecmp()
     #include <strings.h>    // for strcasecmp()
-#endif // HAVE_STRINGS_H
+#endif // HAVE_STRCASECMP_IN_STRINGS_H
 
 #include "wx/wxchar.h"      // for wxChar
 #include "wx/buffer.h"      // for wxCharBuffer
 
 #include "wx/wxchar.h"      // for wxChar
 #include "wx/buffer.h"      // for wxCharBuffer
@@ -134,7 +134,9 @@ inline int Stricmp(const char *psz1, const char *psz2)
   return stricmp(psz1, psz2);
 #elif defined(__WXPM__)
   return stricmp(psz1, psz2);
   return stricmp(psz1, psz2);
 #elif defined(__WXPM__)
   return stricmp(psz1, psz2);
-#elif defined(__UNIX__) || defined(__GNUWIN32__)
+#elif defined(HAVE_STRCASECMP_IN_STRING_H) || \
+      defined(HAVE_STRCASECMP_IN_STRINGS_H) || \
+      defined(__GNUWIN32__)
   return strcasecmp(psz1, psz2);
 #elif defined(__MWERKS__) && !defined(__INTEL__)
   register char c1, c2;
   return strcasecmp(psz1, psz2);
 #elif defined(__MWERKS__) && !defined(__INTEL__)
   register char c1, c2;
@@ -173,7 +175,7 @@ inline const wxString& wxGetEmptyString() { return *(wxString *)&wxEmptyString;
 #include "wx/afterstd.h"
 
 #if wxUSE_UNICODE
 #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;
         typedef std::wstring wxStringBase;
     #else
         typedef std::basic_string<wxChar> wxStringBase;
@@ -183,7 +185,7 @@ inline const wxString& wxGetEmptyString() { return *(wxString *)&wxEmptyString;
 #endif
 
 #if (defined(__GNUG__) && (__GNUG__ < 3)) || \
 #endif
 
 #if (defined(__GNUG__) && (__GNUG__ < 3)) || \
-    (defined(_MSC_VER) && (_MSC_VER <= 1100))
+    (defined(_MSC_VER) && (_MSC_VER <= 1200))
     #define wxSTRING_BASE_HASNT_CLEAR
 #endif
 
     #define wxSTRING_BASE_HASNT_CLEAR
 #endif
 
@@ -331,8 +333,21 @@ public:
   wxStringBase(const void *pStart, const void *pEnd);
 
     // dtor is not virtual, this class must not be inherited from!
   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);
   // overloaded assignment
     // from another wxString
   wxStringBase& operator=(const wxStringBase& stringSrc);
@@ -439,7 +454,7 @@ public:
   wxStringBase& insert(size_t nPos, size_t n, wxChar ch)
     { return insert(nPos, wxStringBase(n, ch)); }
   iterator insert(iterator it, wxChar ch)
   wxStringBase& insert(size_t nPos, size_t n, wxChar ch)
     { return insert(nPos, wxStringBase(n, ch)); }
   iterator insert(iterator it, wxChar ch)
-    { size_t idx = it - begin(); insert(idx, 1, ch); return begin() + idx; } 
+    { size_t idx = it - begin(); insert(idx, 1, ch); return begin() + idx; }
   void insert(iterator it, const_iterator first, const_iterator last)
     { insert(it - begin(), first, last - first); }
   void insert(iterator it, size_type n, wxChar ch)
   void insert(iterator it, const_iterator first, const_iterator last)
     { insert(it - begin(), first, last - first); }
   void insert(iterator it, size_type n, wxChar ch)
@@ -523,6 +538,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;
     { 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); }
     // same as find(char, size_t)
   size_t find_first_of(wxChar c, size_t nStart = 0) const
     { return find(c, nStart); }
@@ -531,6 +547,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;
     { 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); }
     // same as above
   size_t find_last_of(wxChar c, size_t nStart = npos) const
     { return rfind(c, nStart); }
@@ -542,13 +559,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;
     { 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
     // 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;
     // 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;
 
     // same as above
   size_t find_last_not_of(wxChar ch, size_t nStart = npos) const;
 
@@ -1076,7 +1095,7 @@ public:
   void UngetWriteBuf(size_t nLen);
 #endif
 
   void UngetWriteBuf(size_t nLen);
 #endif
 
-  // wxWindows version 1 compatibility functions
+  // wxWidgets version 1 compatibility functions
 
   // use Mid()
   wxString SubString(size_t from, size_t to) const
 
   // use Mid()
   wxString SubString(size_t from, size_t to) const
@@ -1132,7 +1151,7 @@ public:
       : wxStringBase(str, nPos, nLen) { }
     // take all characters from pStart to pEnd
   wxString(const void *pStart, const void *pEnd)
       : wxStringBase(str, nPos, nLen) { }
     // take all characters from pStart to pEnd
   wxString(const void *pStart, const void *pEnd)
-      : wxStringBase((const char*)pStart, (const char*)pEnd) { }
+      : wxStringBase((const wxChar*)pStart, (const wxChar*)pEnd) { }
 #if wxUSE_STL
   wxString(const_iterator first, const_iterator last)
       : wxStringBase(first, last) { }
 #if wxUSE_STL
   wxString(const_iterator first, const_iterator last)
       : wxStringBase(first, last) { }
@@ -1205,7 +1224,7 @@ public:
   wxString& insert(size_t nPos, size_t n, wxChar ch)
     { return (wxString&)wxStringBase::insert(nPos, n, ch); }
   iterator insert(iterator it, wxChar ch)
   wxString& insert(size_t nPos, size_t n, wxChar ch)
     { return (wxString&)wxStringBase::insert(nPos, n, ch); }
   iterator insert(iterator it, wxChar ch)
-    { return wxStringBase::insert(it, ch); } 
+    { return wxStringBase::insert(it, ch); }
   void insert(iterator it, const_iterator first, const_iterator last)
     { wxStringBase::insert(it, first, last); }
   void insert(iterator it, size_type n, wxChar ch)
   void insert(iterator it, const_iterator first, const_iterator last)
     { wxStringBase::insert(it, first, last); }
   void insert(iterator it, size_type n, wxChar ch)