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.

Reply via email to