]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/string.h
wxTopLevelWindows is now a wxWindowList, better compatibility with the old
[wxWidgets.git] / include / wx / string.h
index 593b80c603398e472bbc0bc9fd1c3f8e8a0f6ba6..50f9fbf4a10deab8f4e0b1b7edbd074050b208eb 100644 (file)
 #include <limits.h>
 #include <stdlib.h>
 
 #include <limits.h>
 #include <stdlib.h>
 
+#ifdef HAVE_STRINGS_H
+    #include <strings.h>    // for strcasecmp()
+#endif // AIX
+
 #ifndef  WX_PRECOMP
   #include "wx/defs.h"
 
 #ifndef  WX_PRECOMP
   #include "wx/defs.h"
 
@@ -79,7 +83,7 @@ inline size_t WXDLLEXPORT Strlen(const char *psz)
 // portable strcasecmp/_stricmp
 inline int WXDLLEXPORT Stricmp(const char *psz1, const char *psz2)
 {
 // portable strcasecmp/_stricmp
 inline int WXDLLEXPORT Stricmp(const char *psz1, const char *psz2)
 {
-#if     defined(__VISUALC__) || defined(__MWERKS__)
+#if     defined(__VISUALC__) || ( defined(__MWERKS__) && defined(__INTEL__) )
   return _stricmp(psz1, psz2);
 #elif     defined(__SC__)
   return _stricmp(psz1, psz2);
   return _stricmp(psz1, psz2);
 #elif     defined(__SC__)
   return _stricmp(psz1, psz2);
@@ -91,7 +95,7 @@ inline int WXDLLEXPORT Stricmp(const char *psz1, const char *psz2)
   return stricmp(psz1, psz2);
 #elif   defined(__UNIX__) || defined(__GNUWIN32__)
   return strcasecmp(psz1, psz2);
   return stricmp(psz1, psz2);
 #elif   defined(__UNIX__) || defined(__GNUWIN32__)
   return strcasecmp(psz1, psz2);
-#elif defined(__MWERKS__) && !defined(_MSC_VER)
+#elif defined(__MWERKS__) && !defined(__INTEL__)
   register char c1, c2;
   do {
     c1 = tolower(*psz1++);
   register char c1, c2;
   do {
     c1 = tolower(*psz1++);
@@ -316,9 +320,10 @@ public:
     char& Last()
       { wxASSERT( !IsEmpty() ); CopyBeforeWrite(); return m_pchData[Len()-1]; }
 
     char& Last()
       { wxASSERT( !IsEmpty() ); CopyBeforeWrite(); return m_pchData[Len()-1]; }
 
-    // on alpha-linux this gives overload problems:
-    // Also on Solaris, so removing for now (JACS)
-#if ! defined(__ALPHA__)
+    // under Unix it is tested with configure, assume it works on other
+    // platforms (there might be overloading problems if size_t and int are
+    // the same type)
+#if !defined(__UNIX__) || wxUSE_SIZE_T_STRING_OPERATOR
     // operator version of GetChar
     char  operator[](size_t n) const
       { ASSERT_VALID_INDEX( n ); return m_pchData[n]; }
     // operator version of GetChar
     char  operator[](size_t n) const
       { ASSERT_VALID_INDEX( n ); return m_pchData[n]; }
@@ -410,7 +415,7 @@ public:
   wxString& operator<<(double d);
 
   // string comparison
   wxString& operator<<(double d);
 
   // string comparison
-    // case-sensitive comparison: return 0 if =, +1 if > or -1 if <
+    // case-sensitive comparison (returns a value < 0, = 0 or > 0)
   int  Cmp(const char *psz) const { return strcmp(c_str(), psz); }
     // same as Cmp() but not case-sensitive
   int  CmpNoCase(const char *psz) const { return Stricmp(c_str(), psz); }
   int  Cmp(const char *psz) const { return strcmp(c_str(), psz); }
     // same as Cmp() but not case-sensitive
   int  CmpNoCase(const char *psz) const { return Stricmp(c_str(), psz); }
@@ -740,6 +745,10 @@ public:
 class WXDLLEXPORT wxArrayString
 {
 public:
 class WXDLLEXPORT wxArrayString
 {
 public:
+  // type of function used by wxArrayString::Sort()
+  typedef int (*CompareFunction)(const wxString& first,
+                                 const wxString& second);
+
   // constructors and destructor
     // default ctor
   wxArrayString();
   // constructors and destructor
     // default ctor
   wxArrayString();
@@ -792,13 +801,19 @@ public:
     // remove item by index
   void Remove(size_t nIndex);
 
     // remove item by index
   void Remove(size_t nIndex);
 
-  // sort array elements
-  void Sort(bool bCase = TRUE, bool bReverse = FALSE);
+  // sorting
+    // sort array elements in alphabetical order (or reversed alphabetical
+    // order if reverseOrder parameter is TRUE)
+  void Sort(bool reverseOrder = FALSE);
+    // sort array elements using specified comparaison function
+  void Sort(CompareFunction compareFunction);
 
 private:
   void    Grow();     // makes array bigger if needed
   void    Free();     // free the string stored
 
 
 private:
   void    Grow();     // makes array bigger if needed
   void    Free();     // free the string stored
 
+  void    DoSort();   // common part of all Sort() variants
+
   size_t  m_nSize,    // current size of the array
           m_nCount;   // current number of elements
 
   size_t  m_nSize,    // current size of the array
           m_nCount;   // current number of elements