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

Reply via email to