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

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);
	~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);
	~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);
	~PackageArchitectureMatchesSpecification();
};
									/*}}}*/
}
}
#endif