Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=b54aaa4e597d13ad2ce17f540755a32222f3eae1

commit b54aaa4e597d13ad2ce17f540755a32222f3eae1
Author: Michel Hermier <[email protected]>
Date:   Sun Aug 17 09:43:39 2014 +0200

libpacman: Allow package matcher to match directely from package/pattern name 
whithout the need of an external FStrMatcher.

diff --git a/lib/libpacman/db.cpp b/lib/libpacman/db.cpp
index d009730..e45d4a4 100644
--- a/lib/libpacman/db.cpp
+++ b/lib/libpacman/db.cpp
@@ -109,40 +109,32 @@ FPtrList *Database::filter(const FStringList *needles, 
int packagestrmatcher_fla
pmlist_t *i, *j, *ret = NULL;

for(i = needles; i; i = i->next) {
-               FStrMatcher strmatcher = { NULL };
-               const char *targ = f_stringlistitem_to_str(i);
+               const char *pattern = f_stringlistitem_to_str(i);

-               if(f_strempty(targ)) {
+               if(f_strempty(pattern)) {
continue;
}
-               _pacman_log(PM_LOG_DEBUG, "searching for target '%s'\n", targ);
-               if(f_strmatcher_init(&strmatcher, targ, strmatcher_flags) == 0) 
{
-                       PackageMatcher packagematcher(&strmatcher, 
packagestrmatcher_flags);
+               _pacman_log(PM_LOG_DEBUG, "searching for target '%s'\n", 
pattern);

-                       for(j = _pacman_db_get_pkgcache(this); j; j = j->next) {
-                               Package *pkg = j->data;
+               PackageMatcher packagematcher(pattern, packagestrmatcher_flags, 
strmatcher_flags);

-                               if(packagematcher.match(pkg)) {
-                                       ret = f_ptrlist_append(ret, pkg);
-                               }
+               for(j = _pacman_db_get_pkgcache(this); j; j = j->next) {
+                       Package *pkg = j->data;
+
+                       if(packagematcher.match(pkg)) {
+                               ret = f_ptrlist_append(ret, pkg);
}
}
-               f_strmatcher_fini(&strmatcher);
}
return(ret);
}

-FPtrList *Database::filter(const char *target, int packagestrmatcher_flags, 
int strmatcher_flags)
+FPtrList *Database::filter(const char *pattern, int packagestrmatcher_flags, 
int strmatcher_flags)
{
-       FPtrList *ret = NULL;
-       FStrMatcher strmatcher = { NULL };
-
-       if(!f_strempty(target) &&
-               f_strmatcher_init(&strmatcher, target, strmatcher_flags) == 0) {
-               ret = filter(&strmatcher, packagestrmatcher_flags);
-               f_strmatcher_fini(&strmatcher);
+       if(!f_strempty(pattern)) {
+               return filter(PackageMatcher(pattern, packagestrmatcher_flags, 
strmatcher_flags));
}
-       return(ret);
+       return NULL;
}

Package *Database::find(const PackageMatcher &packagematcher)
@@ -170,21 +162,12 @@ Package *Database::find(const FStrMatcher *strmatcher, 
int packagestrmatcher_fla
return find(PackageMatcher(strmatcher, packagestrmatcher_flags));
}

-Package *Database::find(const char *target, int packagestrmatcher_flags, int 
strmatcher_flags)
+Package *Database::find(const char *pattern, int packagestrmatcher_flags, int 
strmatcher_flags)
{
-       Package *ret = NULL;
-       FStrMatcher strmatcher = { NULL };
-
-       if(!_pacman_strempty(target)) {
-               if (packagestrmatcher_flags == PM_PACKAGE_FLAG_NAME &&
-                               strmatcher_flags == F_STRMATCHER_EQUAL) {
-                       ret = _pacman_pkg_isin(target, 
_pacman_db_get_pkgcache(this));
-               } else if (f_strmatcher_init(&strmatcher, target, 
strmatcher_flags) == 0) {
-                       ret = find(&strmatcher, packagestrmatcher_flags);
-                       f_strmatcher_fini(&strmatcher);
-               }
+       if(!_pacman_strempty(pattern)) {
+               return find(PackageMatcher(pattern, packagestrmatcher_flags, 
strmatcher_flags));
}
-       return ret;
+       return NULL;
}

FPtrList *Database::whatPackagesProvide(const char *target)
diff --git a/lib/libpacman/db.h b/lib/libpacman/db.h
index 5d68b60..6b9bc8e 100644
--- a/lib/libpacman/db.h
+++ b/lib/libpacman/db.h
@@ -70,7 +70,7 @@ public:
pmlist_t *filter(const libpacman::PackageMatcher &packagematcher);
pmlist_t *filter(const FStrMatcher *strmatcher, int packagestrmatcher_flags);
FPtrList *filter(const FStringList *needles, int packagestrmatcher_flags, int 
strmatcher_flags = F_STRMATCHER_EQUAL);
-       FPtrList *filter(const char *target, int packagestrmatcher_flags, int 
strmatcher_flags = F_STRMATCHER_EQUAL);
+       FPtrList *filter(const char *pattern, int packagestrmatcher_flags, int 
strmatcher_flags = F_STRMATCHER_EQUAL);
libpacman::Package *find(const libpacman::PackageMatcher &packagematcher);
libpacman::Package *find(const FStrMatcher *strmatcher, int 
packagestrmatcher_flags);
libpacman::Package *find(const char *target,
diff --git a/lib/libpacman/package.cpp b/lib/libpacman/package.cpp
index 0fff5b6..f7c454a 100644
--- a/lib/libpacman/package.cpp
+++ b/lib/libpacman/package.cpp
@@ -353,6 +353,12 @@ int PackageMatcher_match_cb(const void *ptr, const void 
*matcher_data)
return ((const PackageMatcher *)matcher_data)->match((const Package *)ptr);
}

+PackageMatcher::PackageMatcher(const char *pattern, int flags = 
PM_PACKAGE_FLAG_NAME, int strmatcher_flags = F_STRMATCHER_EQUAL)
+       : m_strmatcher(&m_strmatcher_internal), m_flags(flags)
+{
+       f_strmatcher_init(m_strmatcher, pattern, strmatcher_flags);
+}
+
PackageMatcher::PackageMatcher(const FStrMatcher *strmatcher, int flags)
: m_strmatcher(strmatcher), m_flags(flags)
{
@@ -362,6 +368,9 @@ PackageMatcher::PackageMatcher(const FStrMatcher 
*strmatcher, int flags)

PackageMatcher::~PackageMatcher()
{
+       if(m_strmatcher == &m_strmatcher_internal) {
+               f_strmatcher_fini(m_strmatcher);
+       }
}

#if 0
diff --git a/lib/libpacman/package.h b/lib/libpacman/package.h
index 7ee6d18..a50921d 100644
--- a/lib/libpacman/package.h
+++ b/lib/libpacman/package.h
@@ -170,6 +170,7 @@ class PackageMatcher
: FMatcher
{
public:
+       PackageMatcher(const char *str, int flags = PM_PACKAGE_FLAG_NAME, int 
strmatcher_flags = F_STRMATCHER_EQUAL);
PackageMatcher(const FStrMatcher *strmatcher, int flags);
~PackageMatcher();

@@ -181,6 +182,7 @@ public:
private:
const FStrMatcher *m_strmatcher;
int m_flags;
+       FStrMatcher m_strmatcher_internal;
};

}
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to