1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
|
// -*- 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 <apt-pkg/cacheiterators.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
|