//
// aegis - project change supervisor
// Copyright (C) 2004-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_NSTRING_LIST_H
#define COMMON_NSTRING_LIST_H
#include
#include
/**
* The nstring_list class is used to represent a dynamically sized list
* of nstrings.
*/
class nstring_list
{
public:
/**
* The destructor.
*
* This class is not to be derived from because the destructor is
* not virtual.
*/
~nstring_list()
{
}
/**
* The default constructor.
*/
nstring_list()
{
}
/**
* The copy constructor.
*/
nstring_list(const nstring_list &arg) :
content(arg.content)
{
}
/**
* The backwards compatible copy constructor.
*/
nstring_list(const string_list_ty &arg) :
content(arg)
{
}
/**
* The assignment operator.
*/
nstring_list &operator=(const nstring_list &);
/**
* The push_back method is used to add a string to the end of a
* string list.
*/
void
push_back(const nstring &arg)
{
content.push_back(arg.get_ref());
}
/**
* The push_back method is used to append an nstring list onto the
* end of this list.
*
* @param arg
* The strings to push
*/
void push_back(const nstring_list &arg);
/**
* The push_back_unique method is used to add a string to the end
* of a string list, provided it isn't already in the list.
*/
void
push_back_unique(const nstring &arg)
{
content.push_back_unique(arg.get_ref());
}
/**
* The push_back_unique method is used to add a list of strings to
* the end of a string list, provided it they aren't already in the
* list.
*/
void push_back_unique(const nstring_list &arg);
/**
* The pop_back method is used to discard the last value in the list.
* This has O(1) behaviour.
*/
void
pop_back()
{
content.pop_back();
}
/**
* The back method is used to obtain the value of the last element
* of a string list.
*/
const nstring
back()
const
{
if (!content.nstrings)
return nstring();
return nstring(content.string[content.nstrings - 1]);
}
/**
* The size method is used to obtain the size of the list (the
* number of string in the list).
*/
size_t
size()
const
{
return content.nstrings;
}
/**
* The empty method is used to determine whether the string list is
* empty (no elements) or not.
*/
bool
empty()
const
{
return !content.nstrings;
}
/**
* The clear method is used to discard all elemets of a string list.
*/
void clear();
/**
* The get method is used to obtain the value of the nth element
* of a string list.
*/
nstring get(int n) const;
/**
* The [] operator is used to obtain the value of the nth element
* of a string list.
*/
nstring
operator[](int n)
const
{
return get(n);
}
/**
* The split method is used to replace the contents of the list
* with a new list, formed by splitting "str" into several pieces,
* separated by any pf the characters in "sep".
*
* \param str
* The string to be split.
* \param sep
* The separators between each field.
* \param ewhite
* If true, get rid of extra white space at the beginning and
* end of each field. Default to false.
*/
void split(const nstring &str, const char *sep = 0, bool ewhite = false);
/**
* The unsplit method is used to form a single string by gluing all
* of the string list members together.
*/
nstring unsplit(const char *separator = 0) const;
/**
* The member method is used to test whether the given narrow
* string is present in the narrow string list,
*
* \param arg
* The narrow string to look for.
* \returns
* bool; false if not present, true if present at least once.
*/
bool member(const nstring &arg) const;
/**
* The sort method is used to perform an in situ sort the
* string list values in a string list. The comparison function
* used is strcmp.
*/
void sort();
/**
* The gmatch_pattern method is used to determine if there is at
* least one member of the string list which matches the given
* pattern.
*
* \param pattern
* This is a file globbing pattern, such as used by the shell
* for expanding file names. See glob(3) for a definition of
* the patterns.
* \returns
* int; 1 for a match, 0 for no match, -1 for invalid pattern.
*/
int gmatch_pattern(const nstring &pattern) const;
/**
* The gmatch_candidate method is used to determine if there is at
* least one member of the string list which matches the given
* pattern.
*
* \param candidate
* This is the candidate string to be matched against each
* pattern in the string list.
* \returns
* int; 1 for a match, 0 for no match, -1 for invalid pattern.
*/
int gmatch_candidate(const nstring &candidate) const;
/**
* The remove method is used to remove a string. It is not an
* error if the string is not present. This has O(n) behaviour.
*
* @param arg
* The string value to be removed.
*/
void remove(const nstring &arg);
private:
/**
* The content instance variable is used to remember the contents
* of the string list.
*/
string_list_ty content;
};
#endif // COMMON_NSTRING_LIST_H