#include <limits.h>
#include <stdlib.h>
+#ifdef HAVE_STRINGS_H
+ #include <strings.h> // for strcasecmp()
+#endif // AIX
+
#ifndef WX_PRECOMP
#include "wx/defs.h"
// 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(__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++);
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]; }
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); }
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();
// 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
+ void DoSort(); // common part of all Sort() variants
+
size_t m_nSize, // current size of the array
m_nCount; // current number of elements