summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apt-pkg/cachefilter.h63
-rw-r--r--apt-private/private-list.cc9
2 files changed, 71 insertions, 1 deletions
diff --git a/apt-pkg/cachefilter.h b/apt-pkg/cachefilter.h
index ddd8df16e..34b7d0b46 100644
--- a/apt-pkg/cachefilter.h
+++ b/apt-pkg/cachefilter.h
@@ -15,6 +15,66 @@
namespace APT {
namespace CacheFilter {
+#define PACKAGE_MATCHER_ABI_COMPAT 1
+#ifdef PACKAGE_MATCHER_ABI_COMPAT
+
+// PackageNameMatchesRegEx /*{{{*/
+class PackageNameMatchesRegEx {
+ /** \brief dpointer placeholder (for later in case we need it) */
+ void *d;
+ regex_t* pattern;
+public:
+ PackageNameMatchesRegEx(std::string const &Pattern);
+ bool operator() (pkgCache::PkgIterator const &Pkg);
+ bool operator() (pkgCache::GrpIterator const &Grp);
+ ~PackageNameMatchesRegEx();
+};
+ /*}}}*/
+// PackageNameMatchesFnmatch /*{{{*/
+ class PackageNameMatchesFnmatch {
+ /** \brief dpointer placeholder (for later in case we need it) */
+ void *d;
+ const std::string Pattern;
+public:
+ PackageNameMatchesFnmatch(std::string const &Pattern)
+ : Pattern(Pattern) {};
+ bool operator() (pkgCache::PkgIterator const &Pkg);
+ bool operator() (pkgCache::GrpIterator const &Grp);
+ ~PackageNameMatchesFnmatch() {};
+};
+ /*}}}*/
+// PackageArchitectureMatchesSpecification /*{{{*/
+/** \class PackageArchitectureMatchesSpecification
+ \brief matching against architecture specification strings
+
+ The strings are of the format <kernel>-<cpu> where either component,
+ or the whole string, can be the wildcard "any" as defined in
+ debian-policy ยง11.1 "Architecture specification strings".
+
+ Examples: i386, mipsel, linux-any, any-amd64, any */
+class PackageArchitectureMatchesSpecification {
+ std::string literal;
+ std::string complete;
+ bool isPattern;
+ /** \brief dpointer placeholder (for later in case we need it) */
+ void *d;
+public:
+ /** \brief matching against architecture specification strings
+ *
+ * @param pattern is the architecture specification string
+ * @param isPattern defines if the given \b pattern is a
+ * architecture specification pattern to match others against
+ * or if it is the fixed string and matched against patterns
+ */
+ PackageArchitectureMatchesSpecification(std::string const &pattern, bool const isPattern = true);
+ bool operator() (char const * const &arch);
+ bool operator() (pkgCache::PkgIterator const &Pkg);
+ bool operator() (pkgCache::VerIterator const &Ver);
+ ~PackageArchitectureMatchesSpecification();
+};
+
+#else
+
class PackageMatcher {
public:
virtual bool operator() (pkgCache::PkgIterator const &Pkg) { return false; };
@@ -37,7 +97,7 @@ public:
};
/*}}}*/
// PackageNameMatchesFnmatch /*{{{*/
- class PackageNameMatchesFnmatch : public PackageMatcher{
+ class PackageNameMatchesFnmatch : public PackageMatcher{
/** \brief dpointer placeholder (for later in case we need it) */
void *d;
const std::string Pattern;
@@ -78,6 +138,7 @@ public:
virtual bool operator() (pkgCache::VerIterator const &Ver);
virtual ~PackageArchitectureMatchesSpecification();
};
+#endif
/*}}}*/
}
}
diff --git a/apt-private/private-list.cc b/apt-private/private-list.cc
index ac72ce51a..c3a21aafc 100644
--- a/apt-private/private-list.cc
+++ b/apt-private/private-list.cc
@@ -53,6 +53,9 @@ struct PackageSortAlphabetic
}
};
+#ifdef PACKAGE_MATCHER_ABI_COMPAT
+#define PackageMatcher PackageNameMatchesFnmatch
+#endif
class PackageNameMatcher : public Matcher
{
public:
@@ -61,11 +64,16 @@ class PackageNameMatcher : public Matcher
for(int i=0; patterns[i] != NULL; i++)
{
std::string pattern = patterns[i];
+#ifdef PACKAGE_MATCHER_ABI_COMPAT
+ APT::CacheFilter::PackageNameMatchesFnmatch *cachefilter = NULL;
+ cachefilter = new APT::CacheFilter::PackageNameMatchesFnmatch(pattern);
+#else
APT::CacheFilter::PackageMatcher *cachefilter = NULL;
if(_config->FindB("APT::Cmd::UseRegexp", false) == true)
cachefilter = new APT::CacheFilter::PackageNameMatchesRegEx(pattern);
else
cachefilter = new APT::CacheFilter::PackageNameMatchesFnmatch(pattern);
+#endif
filters.push_back(cachefilter);
}
}
@@ -88,6 +96,7 @@ class PackageNameMatcher : public Matcher
private:
std::vector<APT::CacheFilter::PackageMatcher*> filters;
std::vector<APT::CacheFilter::PackageMatcher*>::const_iterator J;
+ #undef PackageMatcher
};