summaryrefslogtreecommitdiff
path: root/apt-pkg/cachefilter.h
blob: 6d10d1163a23598c884789b2d194a52d399f8732 (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
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