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

Reply via email to