]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/cachefilter.h
integrate Anthonys rred with POC for client-side merge
[apt.git] / apt-pkg / cachefilter.h
index 5d426008b26288abb9f83a2f1d671fedfe8ead51..34b7d0b46eb634f4b67ddf9bb7470ecf9b50c33e 100644 (file)
                                                                        /*}}}*/
 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) */
@@ -26,6 +30,116 @@ public:
        ~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; };
+   virtual bool operator() (pkgCache::GrpIterator const &Grp) { return false; };
+   virtual bool operator() (pkgCache::VerIterator const &Ver) { return false; };
+   
+   virtual ~PackageMatcher() {};
+};
+
+// PackageNameMatchesRegEx                                             /*{{{*/
+class PackageNameMatchesRegEx : public PackageMatcher {
+         /** \brief dpointer placeholder (for later in case we need it) */
+         void *d;
+       regex_t* pattern;
+public:
+       PackageNameMatchesRegEx(std::string const &Pattern);
+       virtual bool operator() (pkgCache::PkgIterator const &Pkg);
+       virtual bool operator() (pkgCache::GrpIterator const &Grp);
+       virtual ~PackageNameMatchesRegEx();
+};
+                                                                       /*}}}*/
+// PackageNameMatchesFnmatch                                           /*{{{*/
+   class PackageNameMatchesFnmatch : public PackageMatcher{
+         /** \brief dpointer placeholder (for later in case we need it) */
+         void *d;
+         const std::string Pattern;
+public:
+         PackageNameMatchesFnmatch(std::string const &Pattern) 
+            : Pattern(Pattern) {};
+        virtual bool operator() (pkgCache::PkgIterator const &Pkg);
+       virtual bool operator() (pkgCache::GrpIterator const &Grp);
+       virtual ~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 : public PackageMatcher {
+       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);
+       virtual bool operator() (pkgCache::PkgIterator const &Pkg);
+       virtual bool operator() (pkgCache::VerIterator const &Ver);
+       virtual ~PackageArchitectureMatchesSpecification();
+};
+#endif
+                                                                       /*}}}*/
 }
 }
 #endif