| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- // -*- mode: cpp; mode: fold -*-
- // Description /*{{{*/
- /** \file cachefilter.h
- Collection of functor classes */
- /*}}}*/
- #ifndef APT_CACHEFILTER_H
- #define APT_CACHEFILTER_H
- // Include Files /*{{{*/
- #include <apt-pkg/pkgcache.h>
- #include <string>
- #include <regex.h>
- /*}}}*/
- 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; };
- 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
|