On 11/26/2013 02:28 AM, Kinkie wrote:
> +bool isMember(const SBufList &, const SBuf &, SBufCaseSensitive
> isCaseSensitive = caseSensitive);
Please capitalize global names, such as isMember().
> +bool
> +isMember(const SBufList & sl, const SBuf &S, SBufCaseSensitive
> case_sensitive)
> +{
> + for (SBufList::const_iterator i = sl.begin(); i != sl.end(); ++i)
> + if (i->compare(S,case_sensitive) == 0)
> + return true;
> + return false;
> +}
STL already provides std::find() and std::find_if() that are more
flexible/universal and sometimes faster than isMember(). I suggest that
you provide a predicate to be used for case-specific comparisons of
buffers instead of isMember(). Such a predicate would be usable with any
SBuf container, not just SBufList.
> +SBuf
> +SBufListJoin(const SBufList &list, const SBuf &separator)
> +{
> + if (list.size() == 0)
> + return SBuf("");
> + if (list.size() == 1)
> + return list.front();
This may be very ineffient for large lists and is probably unnecessary.
Avoid list.size() calls if it all possible. std::list::size() is O(n),
not O(1) in some older GCC implementations (at least). For one heated
discussion, see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49561
> + SBufList::const_iterator i;
> + // calculate the total size of the return value
> + SBuf::size_type sz = 0;
> + for (i = list.begin(); i != list.end(); ++i)
> + sz += i->length();
> + sz += separator.length()*list.size();
> +
> + SBuf rv;
> + rv.rawSpace(sz);
> +
> + i = list.begin();
> + rv.append(*i);
> + ++i;
> + for (; i!= list.end(); ++i) {
> + rv.append(separator);
> + rv.append(*i);
> + }
> + return rv;
> +}
Consider using std::accumulate with an appropriate operator instead of
the above. Providing such an operator would allow folks to "join" SBufs
stored in any SBUf container, not just SBufList.
>>> attached is v1 of SBufList. Its purpose is to be the eventual heir
>>> to wordlist.
It may be useful to take a step back and decide whether we need a
one-size-fits all wordlist or many SBuf containers, with different
storage/access trade-offs. I am pretty sure it is the latter. The above
suggestions are meant to make your work usable with all containers (and
minimize code duplication).
HTH,
Alex.