Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=fdd3cc79448f267b6de333dcc66613883c19e391
commit fdd3cc79448f267b6de333dcc66613883c19e391 Author: Michel Hermier <[email protected]> Date: Fri Sep 26 11:41:55 2014 +0200 libpacman: Add F(String)List::contains and find element access members. diff --git a/lib/libpacman/util/flist.h b/lib/libpacman/util/flist.h index 77e4a75..b17b900 100644 --- a/lib/libpacman/util/flist.h +++ b/lib/libpacman/util/flist.h @@ -706,7 +706,33 @@ public: } /* Element access */ - + bool contains(const value_type &val) const + { + return find(val) != end(); + } + + iterator find(const value_type &val) + { + return flib::find(begin(), end(), val); + } + + const_iterator find(const value_type &val) const + { + return flib::find(begin(), end(), val); + } + + template <class UnaryPredicate> + iterator find_if(UnaryPredicate pred) + { + return flib::find_if(begin(), end(), pred); + } + + template <class UnaryPredicate> + const_iterator find_if(UnaryPredicate pred) const + { + return flib::find_if(begin(), end(), pred); + } + /* Modifiers */ template <class Function = ::flib::detail::null_visitor> void clear(Function fn = Function()) @@ -750,7 +776,7 @@ public: size_type size = 0; iterator it = begin(), end = this->end(); - while((it = flib::find_if(it, end, pred)) != end) { + while((it = find_if(pred)) != end) { fn(*it); it = erase(it); ++size; diff --git a/lib/libpacman/util/fstringlist.cpp b/lib/libpacman/util/fstringlist.cpp index 89cf210..89af215 100644 --- a/lib/libpacman/util/fstringlist.cpp +++ b/lib/libpacman/util/fstringlist.cpp @@ -38,14 +38,7 @@ int _pacman_list_is_strin(const char *needle, FStringList *haystack) return 0; } - for(auto lp = haystack->begin(), end = haystack->end(); lp != end; ++lp) { - const char *str = *lp; - - if(str && !strcmp(str, needle)) { - return(1); - } - } - return(0); + return haystack->contains(needle) ? 1 : 0; } /* Filter out any duplicate strings in a list. @@ -197,6 +190,25 @@ FStringList &FStringList::vaddf(const char *fmt, va_list ap) return add_nocopy(dest); } +bool FStringList::contains(const char *s) const +{ + return find(s) != end(); +} + +FStringList::iterator FStringList::find(const char *s) +{ + return find_if( + [&] (const char *o) -> bool + { return f_streq(o, s); }); +} + +FStringList::const_iterator FStringList::find(const char *s) const +{ + return find_if( + [&] (const char *o) -> bool + { return f_streq(o, s); }); +} + FStringList::size_type FStringList::remove(const char *s) { return remove_if( diff --git a/lib/libpacman/util/fstringlist.h b/lib/libpacman/util/fstringlist.h index 0bbd2ab..5936575 100644 --- a/lib/libpacman/util/fstringlist.h +++ b/lib/libpacman/util/fstringlist.h @@ -55,6 +55,9 @@ class FStringList : public FList<const char *> { public: + typedef typename FList<const char *>::iterator iterator; + typedef typename FList<const char *>::const_iterator const_iterator; + FStringList(); FStringList(const FStringList &o); FStringList(FStringList &&o); @@ -68,6 +71,11 @@ public: FStringList &addf(const char *fmt, ...); FStringList &vaddf(const char *fmt, va_list ap); + /* Element access */ + bool contains(const char *s) const; + iterator find(const char *s); + const_iterator find(const char *s) const; + size_type remove(const char *s); template <class UnaryPredicate> _______________________________________________ Frugalware-git mailing list [email protected] http://frugalware.org/mailman/listinfo/frugalware-git
