]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/string.h
Applied patch [ 743248 ] wxArray::RemoveAt() error message fix
[wxWidgets.git] / include / wx / string.h
index 559817da0184cf4b4c35966162ad7d4ccf646637..d082d97b7312e2c61c66c775c6be7087d087c4c0 100644 (file)
@@ -6,7 +6,7 @@
 // Created:     29/01/98
 // RCS-ID:      $Id$
 // Copyright:   (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
-// Licence:     wxWindows license
+// Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
 /*
@@ -190,12 +190,19 @@ struct WXDLLEXPORT wxStringData
   // lock/unlock
   void  Lock()   { if ( !IsEmpty() ) nRefs++;                    }
 
-  // VC++ will refuse to inline this function but profiling shows that it
-  // is wrong
+  // VC++ will refuse to inline Unlock but profiling shows that it is wrong
 #if defined(__VISUALC__) && (__VISUALC__ >= 1200)
   __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)
+#if defined(__VISUALC__) && defined(_MT) && !defined(_DLL)
+  void  Unlock() { if ( !IsEmpty() && --nRefs == 0) Free();  }
+  // we must not inline deallocation since allocation is not inlined
+  void  Free();
+#else
   void  Unlock() { if ( !IsEmpty() && --nRefs == 0) free(this);  }
+#endif
 
   // if we had taken control over string memory (GetWriteBuf), it's
   // intentionally put in invalid state
@@ -258,7 +265,7 @@ private:
   bool AssignCopy(size_t, const wxChar *);
 
   // append a (sub)string
-  bool ConcatSelf(int nLen, const wxChar *src);
+  bool ConcatSelf(size_t nLen, const wxChar *src);
 
   // functions called before writing to the string: they copy it if there
   // are other references to our data (should be the only owner when writing)
@@ -803,6 +810,8 @@ public:
 
   // standard types
   typedef wxChar value_type;
+  typedef size_t size_type;
+  typedef value_type *iterator;
   typedef const value_type *const_iterator;
 
   // an 'invalid' value for string index
@@ -848,6 +857,11 @@ public:
     // position one after the last valid one
   const_iterator end() const { return wx_str() + length(); }
 
+  // first valid index position
+  iterator begin() { CopyBeforeWrite(); return m_pchData; }
+  // position one after the last valid one
+  iterator end() { CopyBeforeWrite(); return m_pchData + length(); }
+
   // lib.string.modifiers
     // append a string
   wxString& append(const wxString& str)
@@ -1261,7 +1275,7 @@ inline wxString operator+(const wxCharBuffer& buf, const wxString& string)
 
 #if defined(wxSTD_STRING_COMPATIBILITY) && wxUSE_STD_IOSTREAM
 
-#include "wx/ioswrap.h"
+#include "wx/iosfwrap.h"
 
 WXDLLEXPORT wxSTD istream& operator>>(wxSTD istream&, wxString&);
 WXDLLEXPORT wxSTD ostream& operator<<(wxSTD ostream&, const wxString&);