Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=7a995207955e05efe6c46668868e885b999f52f3
commit 7a995207955e05efe6c46668868e885b999f52f3 Author: Michel Hermier <[email protected]> Date: Fri Aug 15 10:34:01 2014 +0200 libpacman: Add some finders and filters method to pacman::Database. diff --git a/lib/libpacman/db.cpp b/lib/libpacman/db.cpp index 949a416..0d5f809 100644 --- a/lib/libpacman/db.cpp +++ b/lib/libpacman/db.cpp @@ -85,6 +85,59 @@ Database::~Database() free(path); } +pmlist_t *Database::filter(const FMatcher *packagestrmatcher) +{ + pmlist_t *i, *ret = NULL; + + for(i = _pacman_db_get_pkgcache(this); i; i = i->next) { + Package *pkg = i->data; + + if(f_match(pkg, packagestrmatcher)) { + ret = f_ptrlist_append(ret, pkg); + } + } + return ret; +} + +pmlist_t *Database::filter(const FStrMatcher *strmatcher, int packagestrmatcher_flags) +{ + pmlist_t *ret = NULL; + FMatcher packagestrmatcher; + + if(_pacman_packagestrmatcher_init(&packagestrmatcher, strmatcher, packagestrmatcher_flags) == 0) { + ret = filter(&packagestrmatcher); + _pacman_packagestrmatcher_fini(&packagestrmatcher); + } + return ret; +} + +Package *Database::find(const FMatcher *packagestrmatcher) +{ + // FIXME: search for provide in the same pass ? + pmlist_t *i; + + for(i = _pacman_db_get_pkgcache(this); i; i = i->next) { + Package *pkg = i->data; + + if(f_match(pkg, packagestrmatcher)) { + return pkg; + } + } + return NULL; +} + +Package *Database::find(const FStrMatcher *strmatcher, int packagestrmatcher_flags) +{ + Package *ret = NULL; + FMatcher packagestrmatcher; + + if(_pacman_packagestrmatcher_init(&packagestrmatcher, strmatcher, packagestrmatcher_flags) == 0) { + ret = find(&packagestrmatcher); + _pacman_packagestrmatcher_fini(&packagestrmatcher); + } + return ret; +} + pmlist_t *Database::search(pmlist_t *needles) { pmlist_t *i, *j, *ret = NULL; diff --git a/lib/libpacman/db.h b/lib/libpacman/db.h index bac99b1..410a5ca 100644 --- a/lib/libpacman/db.h +++ b/lib/libpacman/db.h @@ -30,6 +30,7 @@ #include "timestamp.h" #include "kernel/fobject.h" +#include "fstring.h" namespace libpacman { @@ -64,6 +65,11 @@ public: virtual int write(libpacman::Package *info, unsigned int inforeq); // Cache operations + pmlist_t *Database::filter(const FMatcher *packagestrmatcher); + pmlist_t *Database::filter(const FStrMatcher *strmatcher, int packagestrmatcher_flags); + libpacman::Package *Database::find(const FMatcher *packagestrmatcher); + libpacman::Package *Database::find(const FStrMatcher *strmatcher, int packagestrmatcher_flags); + pmlist_t *search(pmlist_t *needles); virtual pmlist_t *getowners(const char *filename); /* Make pure virtual */ _______________________________________________ Frugalware-git mailing list [email protected] http://frugalware.org/mailman/listinfo/frugalware-git
