blob: d9b957c674dbd628e46243a2e50e6b79f2890bb6 (
plain)
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
|
// -*- 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 {
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
|