Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=197f16ecc8241f5737195827c77b5be228996b67
commit 197f16ecc8241f5737195827c77b5be228996b67 Author: Michel Hermier <[email protected]> Date: Sun Sep 28 11:03:42 2014 +0200 libpacman: Drop FList::add_sorted and use flib::set::add where appropriate. diff --git a/lib/libpacman/cache.cpp b/lib/libpacman/cache.cpp index 60ca2f5..4fc8b7d 100644 --- a/lib/libpacman/cache.cpp +++ b/lib/libpacman/cache.cpp @@ -72,7 +72,7 @@ int _pacman_db_load_pkgcache(Database *db) db->rewind(); while((info = db->readpkg(inforeq)) != NULL) { /* add to the collective */ - db->pkgcache.add_sorted(info, _pacman_pkg_cmp); + db->pkgcache.add(info); } return(0); @@ -110,7 +110,7 @@ int _pacman_db_add_pkgincache(Database *db, Package *pkg) pkg->acquire(); // FIXME: Should not be necessary, but required during migration to refcounted object _pacman_log(PM_LOG_DEBUG, _("adding entry '%s' in '%s' cache"), pkg->name(), db->treename()); - db->pkgcache.add_sorted(pkg, _pacman_pkg_cmp); + db->pkgcache.add(pkg); _pacman_db_clear_grpcache(db); @@ -182,10 +182,10 @@ int _pacman_db_load_grpcache(Database *db) if(grp == NULL) { grp = new Group(grp_name); - db->grpcache.add_sorted(grp, _pacman_grp_cmp); + db->grpcache.add(grp); } if(!grp->packages.contains(pkg->name())) { - grp->packages.add_sorted(pkg->name(), strcmp); + grp->packages.add(pkg->name()); } } } diff --git a/lib/libpacman/db.h b/lib/libpacman/db.h index 87aca64..4b25545 100644 --- a/lib/libpacman/db.h +++ b/lib/libpacman/db.h @@ -26,18 +26,19 @@ #include <limits.h> #include <time.h> +#include "group.h" #include "handle.h" #include "package.h" #include "timestamp.h" #include "kernel/fobject.h" #include "util/fptrlist.h" +#include "util/fset.h" #include "util/fstringlist.h" #include "fstring.h" namespace libpacman { -class Group; class Handle; class Package; @@ -87,8 +88,8 @@ public: ::libpacman::Handle *m_handle; char *path; libpacman::Timestamp cache_timestamp; - FList<libpacman::Package *> pkgcache; - FList<libpacman::Group *> grpcache; + flib::set<libpacman::Package *, libpacman::less<const libpacman::Package *>> pkgcache; + flib::set<libpacman::Group *, libpacman::less<const libpacman::Group *>> grpcache; FPtrList servers; protected: diff --git a/lib/libpacman/group.cpp b/lib/libpacman/group.cpp index 7c169ba..f613acb 100644 --- a/lib/libpacman/group.cpp +++ b/lib/libpacman/group.cpp @@ -40,6 +40,11 @@ Group::Group(const char *name) Group::~Group() { } +bool less<const libpacman::Group *>::operator () (const Group *grp1, const Group *grp2) +{ + return _pacman_grp_cmp(grp1, grp2) < 0; +} + /* Helper function for sorting groups */ int _pacman_grp_cmp(const void *g1, const void *g2) diff --git a/lib/libpacman/group.h b/lib/libpacman/group.h index 173e620..f917a3b 100644 --- a/lib/libpacman/group.h +++ b/lib/libpacman/group.h @@ -42,6 +42,15 @@ public: FStringList packages; /* List of unowned strings */ }; + template <class T> + struct less; + + template <> + struct less<const libpacman::Group *> + { + bool operator () (const Group *pkg1, const Group *pkg2); + }; + } int _pacman_grp_cmp(const void *g1, const void *g2); diff --git a/lib/libpacman/package.cpp b/lib/libpacman/package.cpp index 04b4455..f41dd68 100644 --- a/lib/libpacman/package.cpp +++ b/lib/libpacman/package.cpp @@ -340,6 +340,11 @@ bool Package::match(const pmdepend_t &depend) } } +bool less<const libpacman::Package *>::operator () (const Package *pkg1, const Package *pkg2) +{ + return _pacman_pkg_cmp(pkg1, pkg2) < 0; +} + typedef struct FPackageStrMatcher FPackageStrMatcher; struct FPackageStrMatcher diff --git a/lib/libpacman/package.h b/lib/libpacman/package.h index 05569d2..387be8f 100644 --- a/lib/libpacman/package.h +++ b/lib/libpacman/package.h @@ -172,6 +172,15 @@ public: char *m_path; }; + template <class T> + struct less; + + template <> + struct less<const libpacman::Package *> + { + bool operator () (const Package *pkg1, const Package *pkg2); + }; + class PackageMatcher : FMatcher<const libpacman::Package *> { @@ -189,7 +198,7 @@ private: FStrMatcher m_strmatcher_internal; }; -} +} // namespace libpacman int _pacman_pkg_delete(libpacman::Package *self); diff --git a/lib/libpacman/util/flist.h b/lib/libpacman/util/flist.h index 81fcc76..33cedd1 100644 --- a/lib/libpacman/util/flist.h +++ b/lib/libpacman/util/flist.h @@ -826,28 +826,9 @@ public: return const_iterator(c_last()); } - FList &add(const value_type &val) // Make default implementation to happend + void add(const value_type &val) // Make default implementation to happend { (new FListItem<T>(val))->insert_after(last()); - return *this; - } - - template <typename Comparator> - FList &add_sorted(const value_type &data, Comparator cmp) - { - iterable add = new FListItem<T>(data); - - /* Find insertion point. */ - iterable previous, end; - for(previous = end = c_end(); previous->next() != end; previous = previous->next()) { - if(cmp(data, previous->next()->m_data) <= 0) { - break; - } - } - - /* Insert node before insertion point. */ - add->insert_after(previous); - return *this; } bool remove(void *ptr, _pacman_fn_cmp fn, value_type *data) _______________________________________________ Frugalware-git mailing list [email protected] http://frugalware.org/mailman/listinfo/frugalware-git
