]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/string.h
no changes (0 -> NULL)
[wxWidgets.git] / include / wx / string.h
index 51583c89a355333cd55a87df7654b7e1b8cf11b8..e36f11b7ec3ffee08ded13f24ced2dd230a16779 100644 (file)
@@ -296,7 +296,8 @@ public:
     // copy ctor
   wxString(const wxString& stringSrc)
   {
     // copy ctor
   wxString(const wxString& stringSrc)
   {
-    wxASSERT( stringSrc.GetStringData()->IsValid() );
+    wxASSERT_MSG( stringSrc.GetStringData()->IsValid(),
+                  _T("did you forget to call UngetWriteBuf()?") );
 
     if ( stringSrc.IsEmpty() ) {
       // nothing to do for an empty string
 
     if ( stringSrc.IsEmpty() ) {
       // nothing to do for an empty string
@@ -364,8 +365,9 @@ public:
     if ( !GetStringData()->IsEmpty() )
       Reinit();
 
     if ( !GetStringData()->IsEmpty() )
       Reinit();
 
-    wxASSERT( GetStringData()->nDataLength == 0 );  // should be empty
-    wxASSERT( GetStringData()->nAllocLength == 0 ); // and not own any memory
+    wxASSERT_MSG( !GetStringData()->nDataLength &&
+                  !GetStringData()->nAllocLength,
+                  _T("string should be empty after Clear()") );
   }
 
   // contents test
   }
 
   // contents test
@@ -389,10 +391,19 @@ public:
 
     // get last character
     wxChar  Last() const
 
     // get last character
     wxChar  Last() const
-      { wxASSERT( !IsEmpty() ); return m_pchData[Len() - 1]; }
+      {
+          wxASSERT_MSG( !IsEmpty(), _T("wxString: index out of bounds") );
+
+          return m_pchData[Len() - 1];
+      }
+
     // get writable last character
     wxChar& Last()
     // get writable last character
     wxChar& Last()
-      { wxASSERT( !IsEmpty() ); CopyBeforeWrite(); return m_pchData[Len()-1]; }
+      {
+          wxASSERT_MSG( !IsEmpty(), _T("wxString: index out of bounds") );
+          CopyBeforeWrite();
+          return m_pchData[Len()-1];
+      }
 
     /*
         So why do we have all these overloaded operator[]s? A bit of history:
 
     /*
         So why do we have all these overloaded operator[]s? A bit of history:
@@ -519,7 +530,8 @@ public:
       // string += string
   wxString& operator<<(const wxString& s)
   {
       // string += string
   wxString& operator<<(const wxString& s)
   {
-    wxASSERT( s.GetStringData()->IsValid() );
+    wxASSERT_MSG( s.GetStringData()->IsValid(),
+                  _T("did you forget to call UngetWriteBuf()?") );
 
     ConcatSelf(s.Len(), s);
     return *this;
 
     ConcatSelf(s.Len(), s);
     return *this;
@@ -539,14 +551,27 @@ public:
 
       // string += buffer (i.e. from wxGetString)
 #if wxUSE_UNICODE
 
       // string += buffer (i.e. from wxGetString)
 #if wxUSE_UNICODE
-  wxString& operator<<(const wxWCharBuffer& s) { (void)operator<<((const wchar_t *)s); return *this; }
-  void operator+=(const wxWCharBuffer& s) { (void)operator<<((const wchar_t *)s); }
-#else
-  wxString& operator<<(const wxCharBuffer& s) { (void)operator<<((const char *)s); return *this; }
-  void operator+=(const wxCharBuffer& s) { (void)operator<<((const char *)s); }
-#endif
+  wxString& operator<<(const wxWCharBuffer& s)
+    { (void)operator<<((const wchar_t *)s); return *this; }
+  void operator+=(const wxWCharBuffer& s)
+    { (void)operator<<((const wchar_t *)s); }
+#else // !wxUSE_UNICODE
+  wxString& operator<<(const wxCharBuffer& s)
+    { (void)operator<<((const char *)s); return *this; }
+  void operator+=(const wxCharBuffer& s)
+    { (void)operator<<((const char *)s); }
+#endif // wxUSE_UNICODE/!wxUSE_UNICODE
 
     // string += C string
 
     // string += C string
+  wxString& Append(const wxString& s)
+    {
+        // test for IsEmpty() to share the string if possible
+        if ( IsEmpty() )
+            *this = s;
+        else
+            ConcatSelf(s.Length(), s.c_str());
+        return *this;
+    }
   wxString& Append(const wxChar* psz)
     { ConcatSelf(wxStrlen(psz), psz); return *this; }
     // append count copies of given character
   wxString& Append(const wxChar* psz)
     { ConcatSelf(wxStrlen(psz), psz); return *this; }
     // append count copies of given character
@@ -771,7 +796,9 @@ public:
     // take nLen chars starting at nPos
   wxString(const wxString& str, size_t nPos, size_t nLen)
   {
     // take nLen chars starting at nPos
   wxString(const wxString& str, size_t nPos, size_t nLen)
   {
-    wxASSERT( str.GetStringData()->IsValid() );
+    wxASSERT_MSG( str.GetStringData()->IsValid(),
+                  _T("did you forget to call UngetWriteBuf()?") );
+
     InitWith(str.c_str(), nPos, nLen == npos ? 0 : nLen);
   }
     // take all characters from pStart to pEnd
     InitWith(str.c_str(), nPos, nLen == npos ? 0 : nLen);
   }
     // take all characters from pStart to pEnd
@@ -1016,11 +1043,22 @@ public:
   // items access (range checking is done in debug version)
     // get item at position uiIndex
   wxString& Item(size_t nIndex) const
   // items access (range checking is done in debug version)
     // get item at position uiIndex
   wxString& Item(size_t nIndex) const
-    { wxASSERT( nIndex < m_nCount ); return *(wxString *)&(m_pItems[nIndex]); }
+    {
+        wxASSERT_MSG( nIndex < m_nCount,
+                      _T("wxArrayString: index out of bounds") );
+
+        return *(wxString *)&(m_pItems[nIndex]);
+    }
+
     // same as Item()
   wxString& operator[](size_t nIndex) const { return Item(nIndex); }
     // get last item
     // same as Item()
   wxString& operator[](size_t nIndex) const { return Item(nIndex); }
     // get last item
-  wxString& Last() const { wxASSERT( !IsEmpty() ); return Item(Count() - 1); }
+  wxString& Last() const
+  {
+      wxASSERT_MSG( !IsEmpty(),
+                    _T("wxArrayString: index out of bounds") );
+      return Item(Count() - 1);
+  }
 
     // return a wxString[], useful for the controls which
     // take one in their ctor.  You must delete[] it yourself
 
     // return a wxString[], useful for the controls which
     // take one in their ctor.  You must delete[] it yourself
@@ -1036,16 +1074,16 @@ public:
   int  Index (const wxChar *sz, bool bCase = TRUE, bool bFromEnd = FALSE) const;
     // add new element at the end (if the array is not sorted), return its
     // index
   int  Index (const wxChar *sz, bool bCase = TRUE, bool bFromEnd = FALSE) const;
     // add new element at the end (if the array is not sorted), return its
     // index
-  size_t Add(const wxString& str);
+  size_t Add(const wxString& str, size_t nInsert = 1);
     // add new element at given position
     // add new element at given position
-  void Insert(const wxString& str, size_t uiIndex);
+  void Insert(const wxString& str, size_t uiIndex, size_t nInsert = 1);
     // expand the array to have count elements
   void SetCount(size_t count);
     // remove first item matching this value
   void Remove(const wxChar *sz);
     // remove item by index
     // expand the array to have count elements
   void SetCount(size_t count);
     // remove first item matching this value
   void Remove(const wxChar *sz);
     // remove item by index
-  void Remove(size_t nIndex);
-  void RemoveAt(size_t nIndex) { Remove(nIndex); }
+  void Remove(size_t nIndex, size_t nRemove = 1);
+  void RemoveAt(size_t nIndex, size_t nRemove = 1) { Remove(nIndex, nRemove); }
 
   // sorting
     // sort array elements in alphabetical order (or reversed alphabetical
 
   // sorting
     // sort array elements in alphabetical order (or reversed alphabetical
@@ -1065,7 +1103,7 @@ protected:
   void Copy(const wxArrayString& src);  // copies the contents of another array
 
 private:
   void Copy(const wxArrayString& src);  // copies the contents of another array
 
 private:
-  void Grow();                          // makes array bigger if needed
+  void Grow(size_t nIncrement = 0);     // makes array bigger if needed
   void Free();                          // free all the strings stored
 
   void DoSort();                        // common part of all Sort() variants
   void Free();                          // free all the strings stored
 
   void DoSort();                        // common part of all Sort() variants