| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: arrstr.h
- // Purpose: interface of wxArrayString
- // Author: wxWidgets team
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- /**
- @class wxArrayString
- wxArrayString is an efficient container for storing wxString objects.
- It has the same features as all wxArray classes, i.e. it dynamically expands
- when new items are added to it (so it is as easy to use as a linked list),
- but the access time to the elements is constant, instead of being linear in
- number of elements as in the case of linked lists. It is also very size
- efficient and doesn't take more space than a C array @e wxString[] type
- (wxArrayString uses its knowledge of internals of wxString class to achieve this).
- This class is used in the same way as other dynamic arrays(), except that no
- ::WX_DEFINE_ARRAY declaration is needed for it.
- When a string is added or inserted in the array, a copy of the string is created,
- so the original string may be safely deleted (e.g. if it was a @e wxChar *
- pointer the memory it was using can be freed immediately after this).
- In general, there is no need to worry about string memory deallocation when using
- this class - it will always free the memory it uses itself.
- The references returned by wxArrayString::Item, wxArrayString::Last or
- wxArrayString::operator[] are not constant, so the array elements may
- be modified in place like this:
- @code
- array.Last().MakeUpper();
- @endcode
- @note none of the methods of wxArrayString is virtual including its
- destructor, so this class should not be used as a base class.
- Although this is not true strictly speaking, this class may be considered as
- a specialization of wxArray class for the wxString member data: it is not
- implemented like this, but it does have all of the wxArray functions.
- It also has the full set of <tt>std::vector<wxString></tt> compatible
- methods, including nested @c iterator and @c const_iterator classes which
- should be used in the new code for forward compatibility with the future
- wxWidgets versions.
- @library{wxbase}
- @category{containers}
- @see wxArray<T>, wxString, @ref overview_string
- */
- class wxArrayString : public wxArray
- {
- public:
- /**
- The function type used with wxArrayString::Sort function.
- */
- typedef int (*CompareFunction)(const wxString& first, const wxString& second);
- /**
- Default constructor.
- */
- wxArrayString();
- /**
- Copy constructor.
- */
- wxArrayString(const wxArrayString& array);
- //@{
- /**
- Constructor from a C string array. Pass a size @a sz and an array @a arr.
- **/
- wxArrayString(size_t sz, const char** arr);
- wxArrayString(size_t sz, const wchar_t** arr);
- //@}
- /**
- Constructor from a wxString array. Pass a size @a sz and array @a arr.
- */
- wxArrayString(size_t sz, const wxString* arr);
- /**
- Destructor frees memory occupied by the array strings. For performance
- reasons it is not virtual, so this class should not be derived from.
- */
- ~wxArrayString();
- /**
- Appends the given number of @a copies of the new item @a str to the
- array and returns the index of the first new item in the array.
- @see Insert()
- */
- size_t Add(const wxString& str, size_t copies = 1);
- /**
- Preallocates enough memory to store @a nCount items.
- This function may be used to improve array class performance before
- adding a known number of items consecutively.
- */
- void Alloc(size_t nCount);
- /**
- Clears the array contents and frees memory.
- @see Empty()
- */
- void Clear();
- /**
- Empties the array: after a call to this function GetCount() will return 0.
- However, this function does not free the memory used by the array and so
- should be used when the array is going to be reused for storing other strings.
- Otherwise, you should use Clear() to empty the array and free memory.
- */
- void Empty();
- /**
- Returns the number of items in the array.
- */
- size_t GetCount() const;
- /**
- Search the element in the array, starting from the beginning if @a bFromEnd
- is @false or from end otherwise. If @a bCase, comparison is case sensitive
- (default), otherwise the case is ignored.
- This function uses linear search for wxArrayString.
- Returns index of the first item matched or @c wxNOT_FOUND if there is no match.
- */
- int Index(const wxString& sz, bool bCase = true, bool bFromEnd = false) const;
- /**
- Insert the given number of @a copies of the new element in the array before the
- position @a nIndex. Thus, for example, to insert the string in the beginning of
- the array you would write:
- @code
- Insert("foo", 0);
- @endcode
- If @a nIndex is equal to GetCount() this function behaves as Add().
- */
- void Insert(wxString lItem, size_t nIndex, size_t copies = 1);
- /**
- Returns @true if the array is empty, @false otherwise. This function returns the
- same result as GetCount() == 0 but is probably easier to read.
- */
- bool IsEmpty() const;
- /**
- Return the array element at position @a nIndex. An assert failure will
- result from an attempt to access an element beyond the end of array in debug
- mode, but no check is done in release mode.
- @see operator[] for the operator version.
- */
- //@{
- wxString& Item(size_t nIndex);
- const wxString& Item(size_t nIndex) const;
- //@}
- /**
- Returns the last element of the array. Attempt to access the last element of
- an empty array will result in assert failure in debug build, however no checks
- are done in release mode.
- */
- //@{
- wxString& Last();
- const wxString& Last() const;
- //@}
- /**
- Removes the first item matching this value. An assert failure is provoked by
- an attempt to remove an element which does not exist in debug build.
- @see Index()
- */
- void Remove(const wxString& sz);
- /**
- Removes @a count items starting at position @a nIndex from the array.
- */
- void RemoveAt(size_t nIndex, size_t count = 1);
- /**
- Releases the extra memory allocated by the array.
- This function is useful to minimize the array memory consumption.
- @see Alloc()
- */
- void Shrink();
- /**
- Sorts the array in alphabetical order or in reverse alphabetical order if
- @a reverseOrder is @true. The sort is case-sensitive.
- */
- void Sort(bool reverseOrder = false);
- /**
- Sorts the array using the specified @a compareFunction for item comparison.
- @a CompareFunction is defined as a function taking two <em>const wxString&</em>
- parameters and returning an @e int value less than, equal to or greater
- than 0 if the first string is less than, equal to or greater than the
- second one.
- Example:
- The following example sorts strings by their length.
- @code
- static int CompareStringLen(const wxString& first, const wxString& second)
- {
- return first.length() - second.length();
- }
- ...
- wxArrayString array;
- array.Add("one");
- array.Add("two");
- array.Add("three");
- array.Add("four");
- array.Sort(CompareStringLen);
- @endcode
- */
- void Sort(CompareFunction compareFunction);
- /**
- Compares 2 arrays respecting the case. Returns @true if the arrays have
- different number of elements or if the elements don't match pairwise.
- */
- bool operator !=(const wxArrayString& array) const;
- /**
- Assignment operator.
- */
- wxArrayString& operator=(const wxArrayString&);
- /**
- Compares 2 arrays respecting the case. Returns @true only if the arrays have
- the same number of elements and the same strings in the same order.
- */
- bool operator ==(const wxArrayString& array) const;
- /**
- Return the array element at position @a nIndex. An assert failure will
- result from an attempt to access an element beyond the end of array in
- debug mode, but no check is done in release mode.
- This is the operator version of the Item() method.
- */
- wxString& operator[](size_t nIndex) const;
- };
- /**
- @class wxSortedArrayString
- wxSortedArrayString is an efficient container for storing wxString objects
- which always keeps the string in alphabetical order.
- wxSortedArrayString uses binary search in its wxSortedArrayString::Index() method
- (instead of linear search for wxArrayString::Index()) which makes it much more
- efficient if you add strings to the array rarely (because, of course, you have
- to pay for Index() efficiency by having Add() be slower) but search for them
- often. Several methods should not be used with sorted array (basically, all
- those which break the order of items) which is mentioned in their description.
- @library{wxbase}
- @category{containers}
- @see wxArray, wxString, @ref overview_string
- */
- class wxSortedArrayString : public wxArray
- {
- public:
- /**
- Conversion constructor.
- Constructs a sorted array with the same contents as the (possibly
- unsorted) "array" argument.
- */
- wxSortedArrayString(const wxArrayString& array);
- /**
- @copydoc wxArrayString::Add()
- @warning
- For sorted arrays, the index of the inserted item will not be, in general,
- equal to GetCount() - 1 because the item is inserted at the correct position
- to keep the array sorted and not appended.
- */
- size_t Add(const wxString& str, size_t copies = 1);
- /**
- @copydoc wxArrayString::Index()
- This function uses binary search for wxSortedArrayString, but it ignores
- the @a bCase and @a bFromEnd parameters.
- */
- int Index(const wxString& sz, bool bCase = true,
- bool bFromEnd = false) const;
- /**
- @warning This function should not be used with sorted arrays because it
- could break the order of items and, for example, subsequent calls
- to Index() would then not work!
- @warning In STL mode, Insert is private and simply invokes wxFAIL_MSG.
- */
- void Insert(const wxString& str, size_t nIndex,
- size_t copies = 1);
- //@{
- /**
- @warning This function should not be used with sorted array because it could
- break the order of items and, for example, subsequent calls to Index()
- would then not work! Also, sorting a wxSortedArrayString doesn't make
- sense because its elements are always already sorted.
- @warning In STL mode, Sort is private and simply invokes wxFAIL_MSG.
- */
- void Sort(bool reverseOrder = false);
- void Sort(CompareFunction compareFunction);
- //@}
- };
- // ============================================================================
- // Global functions/macros
- // ============================================================================
- /** @addtogroup group_funcmacro_string */
- //@{
- /**
- Splits the given wxString object using the separator @a sep and returns the
- result as a wxArrayString.
- If the @a escape character is non-@NULL, then the occurrences of @a sep
- immediately prefixed with @a escape are not considered as separators.
- Note that empty tokens will be generated if there are two or more adjacent
- separators.
- @see wxJoin()
- @header{wx/arrstr.h}
- */
- wxArrayString wxSplit(const wxString& str, const wxChar sep,
- const wxChar escape = '\\');
- /**
- Concatenate all lines of the given wxArrayString object using the separator
- @a sep and returns the result as a wxString.
- If the @a escape character is non-@NULL, then it's used as prefix for each
- occurrence of @a sep in the strings contained in @a arr before joining them
- which is necessary in order to be able to recover the original array
- contents from the string later using wxSplit().
- @see wxSplit()
- @header{wx/arrstr.h}
- */
- wxString wxJoin(const wxArrayString& arr, const wxChar sep,
- const wxChar escape = '\\');
- //@}
|