// // aegis - project change supervisor // Copyright (C) 1995, 2002-2006, 2008 Peter Miller // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see // . // #ifndef COMMON_WSTR_LIST_H #define COMMON_WSTR_LIST_H #include /** \addtogroup WStringList * \brief Lists of wide char strings * \ingroup WString * @{ */ /** * The wstring_list_ty class is used to represent a list of wstring_ty * elements. * * \note * This is the inner declaration of wstring_list; if at all * possible, use the wstring_list class instead. */ class wstring_list_ty { public: /** * The destructor. * * \note * It is not virtual. Do not derive from this class. */ ~wstring_list_ty(); /** * The default constructor. */ wstring_list_ty(); /** * The copy constructor. */ wstring_list_ty(const wstring_list_ty &); /** * The assignment operator. */ wstring_list_ty &operator=(const wstring_list_ty &); /** * The size method may be used to determine how many items are in * the wide strinbg list. */ size_t size() const { return nitems; } /** * The empty method is used to determine whether the wide string * list is empty (contains no wide strings). */ bool empty() const { return (nitems == 0); } /** * The get method is used to obtain the Nth wide string pointer. * * \param n * The zero-based string index. * \note * No range checking is performed. */ wstring_ty *get(size_t n) const { return item[n]; } /** * The [] operator is used to obtain the Nth wide string pointer. * * \param n * The zero-based string index. * \note * No range checking is performed. */ wstring_ty *operator[](size_t n) const { return get(n); } /** * The clear method is used to discard all elements of the list. */ void clear(); /** * The push_back mthod is used to append to a wide string list. * This is an O(1) operation. * * \param arg * The string to be appended to the list. */ void push_back(wstring_ty *arg); /** * The push_back method is used to append to a wide string list to * the end of this list. This is an O(n) operation. * * \param arg * The string list to be appended to the list. */ void push_back(const wstring_list_ty &arg); /** * The pop_back method is used to discard the last element of the list. */ void pop_back(); /** * The push_back_unique method is similar to the push_back method, * however it does not append the wide string if it is already in * the list. * * \param arg * The wide string to conditionally append to a wide string list. */ void push_back_unique(wstring_ty *arg); /** * The push_front method is used to prepend to a wide string list. * Note that this is an O(n) operation. * * \param arg * The string to be appended to the list. */ void push_front(wstring_ty *arg); /** * The member method is used to determine whether the given wide * string is a member of this list. This is an O(n) operation. * * \param arg * The wide string to look for. * * \returns * bool; true if the string is present, false if it is not. */ bool member(wstring_ty *arg) const; /** * The remove method is used to remove a wide string from a wide * string list. It is not an error if the string is not a * list member. * * \param arg * The wide string to remove. */ void remove(wstring_ty *arg); /** * The unsplit method is used to form a wide string from a wide * string list. * * \param start * The first element to use. * \param stop * The last element to be used (NOT one past it, as is common * for C++ functions). * \param sep * The separator string to use between elements. * If NULL a single space will be used. */ wstring_ty *unsplit(size_t start, size_t stop, const char *sep = 0) const; /** * The unsplit method is used to form a wide string from a wide * string list. All emelents will be used. * * \param sep * The separator string to use between elements. * If NULL a single space will be used. */ wstring_ty *unsplit(const char *sep = 0) const; /** * The split method is used to split a wide string into compendent pieces. * * \param wis * The wide string to be split. * \param sep * The separator charactres. Any one of these will split. * Defauls to all white space characters. * \param ewhite * True if should discard extra while space at the start and * end of each piece. Defaults to false. */ void split(wstring_ty *wis, const char *sep = 0, bool ewhite = false); /** * The equal_to method is used to test whether this wide string * list is equal to another wide string list. The order of * elements is not relevant. * * \param rhs * The other string list to compare against. */ bool equal_to(const wstring_list_ty &rhs) const; /** * The is_a_subset_of method is used to test whether this wide * string list is an improper subset of another wide string list. * The order of elements is not relevant. * * \param rhs * The other string list to compare against. */ bool is_a_subset_of(const wstring_list_ty &rhs) const; private: /** * The nitems instance variable is used to remember how many * elements of the "item" array have been used. */ size_t nitems; /** * The nitems_max instance variable is used to remember how many * elements have been allocated in the "item" array. */ size_t nitems_max; /** * The items instance variable is used to remember the base of an * arrat of wide string pointers. */ wstring_ty **item; }; inline bool operator==(const wstring_list_ty &lhs, const wstring_list_ty &rhs) { return lhs.equal_to(rhs); } inline bool operator!=(const wstring_list_ty &lhs, const wstring_list_ty &rhs) { return !lhs.equal_to(rhs); } /** @} */ #endif // COMMON_WSTR_LIST_H