1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     interface of wxArrayString 
   4 // Author:      wxWidgets team 
   6 // Licence:     wxWindows license 
   7 ///////////////////////////////////////////////////////////////////////////// 
  11     the following functions are not documented; do they need to be? 
  12     WXDLLIMPEXP_BASE int wxCMPFUNC_CONV wxStringSortAscending(wxString*, wxString*); 
  13     WXDLLIMPEXP_BASE int wxCMPFUNC_CONV wxStringSortDescending(wxString*, wxString*); 
  19     wxArrayString is an efficient container for storing wxString objects. 
  21     It has the same features as all wxArray classes, i.e. it dynamically expands 
  22     when new items are added to it (so it is as easy to use as a linked list), 
  23     but the access time to the elements is constant, instead of being linear in 
  24     number of elements as in the case of linked lists. It is also very size 
  25     efficient and doesn't take more space than a C array @e wxString[] type 
  26     (wxArrayString uses its knowledge of internals of wxString class to achieve this). 
  28     This class is used in the same way as other dynamic arrays(), except that no 
  29     ::WX_DEFINE_ARRAY declaration is needed for it. 
  30     When a string is added or inserted in the array, a copy of the string is created, 
  31     so the original string may be safely deleted (e.g. if it was a @e wxChar * 
  32     pointer the memory it was using can be freed immediately after this). 
  33     In general, there is no need to worry about string memory deallocation when using 
  34     this class - it will always free the memory it uses itself. 
  36     The references returned by wxArrayString::Item, wxArrayString::Last or 
  37     wxArrayString::operator[] are not constant, so the array elements may 
  38     be modified in place like this: 
  41     array.Last().MakeUpper(); 
  44     @note none of the methods of wxArrayString is virtual including its 
  45           destructor, so this class should not be used as a base class. 
  47     Although this is not true strictly speaking, this class may be considered as 
  48     a specialization of wxArray class for the wxString member data: it is not 
  49     implemented like this, but it does have all of the wxArray functions. 
  51     @todo what about stl? how does it integrate? 
  56     @see wxArray, wxString, @ref overview_string 
  58 class wxArrayString 
: public wxArray
 
  69     wxArrayString(const wxArrayString
& array
); 
  73         Constructor from a C string array. Pass a size @a sz and an array @a arr. 
  75     wxArrayString(size_t sz
, const char** arr
); 
  76     wxArrayString(size_t sz
, const wchar_t** arr
); 
  80         Constructor from a wxString array. Pass a size @a sz and array @a arr. 
  82     wxArrayString(size_t sz
, const wxString
* arr
); 
  85         Destructor frees memory occupied by the array strings. For performance 
  86         reasons it is not virtual, so this class should not be derived from. 
  91         Appends the given number of @a copies of the new item @a str to the 
  92         array and returns the index of the first new item in the array. 
  96     size_t Add(const wxString
& str
, size_t copies 
= 1); 
  99         Preallocates enough memory to store @a nCount items. 
 101         This function may be used to improve array class performance before 
 102         adding a known number of items consecutively. 
 104     void Alloc(size_t nCount
); 
 107         Clears the array contents and frees memory. 
 114         Empties the array: after a call to this function GetCount() will return 0. 
 115         However, this function does not free the memory used by the array and so 
 116         should be used when the array is going to be reused for storing other strings. 
 117         Otherwise, you should use Clear() to empty the array and free memory. 
 122         Returns the number of items in the array. 
 124     size_t GetCount() const; 
 127         Search the element in the array, starting from the beginning if @a bFromEnd 
 128         is @false or from end otherwise. If @a bCase, comparison is case sensitive 
 129         (default), otherwise the case is ignored. 
 131         This function uses linear search for wxArrayString. 
 132         Returns index of the first item matched or @c wxNOT_FOUND if there is no match. 
 134     int Index(const wxString
& sz
, bool bCase 
= true, bool bFromEnd 
= false) const; 
 137         Insert the given number of @a copies of the new element in the array before the 
 138         position @a nIndex. Thus, for example, to insert the string in the beginning of 
 139         the array you would write: 
 145         If @a nIndex is equal to GetCount() this function behaves as Add(). 
 147     void Insert(const wxString
& str
, size_t nIndex
, 
 151         Returns @true if the array is empty, @false otherwise. This function returns the 
 152         same result as GetCount() == 0 but is probably easier to read. 
 154     bool IsEmpty() const; 
 157         Return the array element at position @a nIndex. An assert failure will 
 158         result from an attempt to access an element beyond the end of array in debug 
 159         mode, but no check is done in release mode. 
 161         @see operator[] for the operator version. 
 163     wxString
& Item(size_t nIndex
) const; 
 166         Returns the last element of the array. Attempt to access the last element of 
 167         an empty array will result in assert failure in debug build, however no checks 
 168         are done in release mode. 
 170     wxString
& Last() const; 
 173         Removes the first item matching this value. An assert failure is provoked by 
 174         an attempt to remove an element which does not exist in debug build. 
 178     void Remove(const wxString
& sz
); 
 181         Removes @a count items starting at position @a nIndex from the array. 
 183     void RemoveAt(size_t nIndex
, size_t count 
= 1); 
 186         Releases the extra memory allocated by the array. 
 187         This function is useful to minimize the array memory consumption. 
 194         Sorts the array in alphabetical order or in reverse alphabetical order if 
 195         @a reverseOrder is @true. The sort is case-sensitive. 
 197     void Sort(bool reverseOrder 
= false); 
 200         Sorts the array using the specified @a compareFunction for item comparison. 
 201         @a CompareFunction is defined as a function taking two @e const wxString 
 202         parameters and returning an @e int value less than, equal to or greater 
 203         than 0 if the first string is less than, equal to or greater than the 
 207         The following example sorts strings by their length. 
 210         static int CompareStringLen(const wxString& first, const wxString& second) 
 212             return first.length() - second.length(); 
 224         array.Sort(CompareStringLen); 
 227     void Sort(CompareFunction compareFunction
); 
 230         Compares 2 arrays respecting the case. Returns @true if the arrays have 
 231         different number of elements or if the elements don't match pairwise. 
 233     bool operator !=(const wxArrayString
& array
) const; 
 238     wxArrayString
& operator=(const wxArrayString
&); 
 241         Compares 2 arrays respecting the case. Returns @true only if the arrays have 
 242         the same number of elements and the same strings in the same order. 
 244     bool operator ==(const wxArrayString
& array
) const; 
 247         Return the array element at position @a nIndex. An assert failure will 
 248         result from an attempt to access an element beyond the end of array in 
 249         debug mode, but no check is done in release mode. 
 251         This is the operator version of the Item() method. 
 253     wxString
& operator[](size_t nIndex
) const; 
 258     @class wxSortedArrayString 
 260     wxSortedArrayString is an efficient container for storing wxString objects 
 261     which always keeps the string in alphabetical order. 
 263     wxSortedArrayString uses binary search in its wxArrayString::Index() function 
 264     (instead of linear search for wxArrayString::Index()) which makes it much more 
 265     efficient if you add strings to the array rarely (because, of course, you have 
 266     to pay for Index() efficiency by having Add() be slower) but search for them 
 267     often. Several methods should not be used with sorted array (basically, all 
 268     those which break the order of items) which is mentioned in their description. 
 270     @todo what about STL? who does it integrates? 
 273     @category{containers} 
 275     @see wxArray, wxString, @ref overview_string 
 277 class wxSortedArrayString 
: public wxArrayString
 
 282         Copy constructor. Note that when an array is assigned to a sorted array, 
 283         its contents is automatically sorted during construction. 
 285     wxArrayString(const wxArrayString
& array
); 
 288         @copydoc wxArrayString::Add() 
 291         For sorted arrays, the index of the inserted item will not be, in general, 
 292         equal to GetCount() - 1 because the item is inserted at the correct position 
 293         to keep the array sorted and not appended. 
 295     size_t Add(const wxString
& str
, size_t copies 
= 1); 
 299         @copydoc wxArrayString::Index() 
 301         This function uses binary search for wxSortedArrayString, but it ignores 
 302         the @a bCase and @a bFromEnd parameters. 
 304     int Index(const wxString
& sz
, bool bCase 
= true, 
 305               bool bFromEnd 
= false) const; 
 308         @warning this function should not be used with sorted arrays because it 
 309                  could break the order of items and, for example, subsequent calls 
 310                  to Index() would then not work! 
 312     void Insert(const wxString
& str
, size_t nIndex
, 
 317         @warning this function should not be used with sorted array because it could 
 318                  break the order of items and, for example, subsequent calls to Index() 
 319                  would then not work! Also, sorting a wxSortedArrayString doesn't make 
 320                  sense because its elements are always already sorted. 
 322     void Sort(bool reverseOrder 
= false); 
 323     void Sort(CompareFunction compareFunction
); 
 328 // ============================================================================ 
 329 // Global functions/macros 
 330 // ============================================================================ 
 332 /** @ingroup group_funcmacro_string */ 
 336     Splits the given wxString object using the separator @a sep and returns the 
 337     result as a wxArrayString. 
 339     If the @a escape character is non-@NULL, then the occurrences of @a sep 
 340     immediately prefixed with @a escape are not considered as separators. 
 341     Note that empty tokens will be generated if there are two or more adjacent 
 348 wxArrayString 
wxSplit(const wxString
& str
, const wxChar sep
, 
 349                       const wxChar escape 
= '\\'); 
 352     Concatenate all lines of the given wxArrayString object using the separator 
 353     @a sep and returns the result as a wxString. 
 355     If the @a escape character is non-@NULL, then it's used as prefix for each 
 356     occurrence of @a sep in the strings contained in @a arr before joining them 
 357     which is necessary in order to be able to recover the original array 
 358     contents from the string later using wxSplit(). 
 364 wxString 
wxJoin(const wxArrayString
& arr
, const wxChar sep
, 
 365                 const wxChar escape 
= '\\');