From 76e2632459410dec81337edb6a9fee33c9a660f3 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 13 Apr 2024 11:59:37 +0200 Subject: Adding upstream version 2.7.12. Signed-off-by: Daniel Baumann --- apt-pkg/cachefilter.h | 156 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 apt-pkg/cachefilter.h (limited to 'apt-pkg/cachefilter.h') diff --git a/apt-pkg/cachefilter.h b/apt-pkg/cachefilter.h new file mode 100644 index 0000000..1b5f9aa --- /dev/null +++ b/apt-pkg/cachefilter.h @@ -0,0 +1,156 @@ +// -*- mode: cpp; mode: fold -*- +// Description /*{{{*/ +/** \file cachefilter.h + Collection of functor classes */ + /*}}}*/ +#ifndef APT_CACHEFILTER_H +#define APT_CACHEFILTER_H +// Include Files /*{{{*/ +#include +#include + +#include +#include +#include + +#include + +class pkgCacheFile; + /*}}}*/ +namespace APT { +namespace CacheFilter { + +class APT_PUBLIC Matcher { +public: + virtual bool operator() (pkgCache::PkgIterator const &/*Pkg*/) = 0; + virtual bool operator() (pkgCache::GrpIterator const &/*Grp*/) = 0; + virtual bool operator() (pkgCache::VerIterator const &/*Ver*/) = 0; + virtual ~Matcher(); +}; + +class APT_PUBLIC PackageMatcher : public Matcher { +public: + bool operator() (pkgCache::PkgIterator const &Pkg) APT_OVERRIDE = 0; + bool operator() (pkgCache::VerIterator const &Ver) APT_OVERRIDE { return (*this)(Ver.ParentPkg()); } + bool operator() (pkgCache::GrpIterator const &/*Grp*/) APT_OVERRIDE { return false; } + ~PackageMatcher() APT_OVERRIDE; +}; + +// Generica like True, False, NOT, AND, OR /*{{{*/ +class APT_PUBLIC TrueMatcher : public Matcher { +public: + bool operator() (pkgCache::PkgIterator const &Pkg) APT_OVERRIDE; + bool operator() (pkgCache::GrpIterator const &Grp) APT_OVERRIDE; + bool operator() (pkgCache::VerIterator const &Ver) APT_OVERRIDE; +}; + +class APT_PUBLIC FalseMatcher : public Matcher { +public: + bool operator() (pkgCache::PkgIterator const &Pkg) APT_OVERRIDE; + bool operator() (pkgCache::GrpIterator const &Grp) APT_OVERRIDE; + bool operator() (pkgCache::VerIterator const &Ver) APT_OVERRIDE; +}; + +class APT_PUBLIC NOTMatcher : public Matcher { + Matcher * const matcher; +public: + explicit NOTMatcher(Matcher * const matcher); + bool operator() (pkgCache::PkgIterator const &Pkg) APT_OVERRIDE; + bool operator() (pkgCache::GrpIterator const &Grp) APT_OVERRIDE; + bool operator() (pkgCache::VerIterator const &Ver) APT_OVERRIDE; + ~NOTMatcher() APT_OVERRIDE; +}; + +class APT_PUBLIC ANDMatcher : public Matcher { + std::vector matchers; +public: + // 5 ought to be enough for everybody… c++11 variadic templates would be nice + ANDMatcher(); + explicit ANDMatcher(Matcher * const matcher1); + ANDMatcher(Matcher * const matcher1, Matcher * const matcher2); + ANDMatcher(Matcher * const matcher1, Matcher * const matcher2, Matcher * const matcher3); + ANDMatcher(Matcher * const matcher1, Matcher * const matcher2, Matcher * const matcher3, Matcher * const matcher4); + ANDMatcher(Matcher * const matcher1, Matcher * const matcher2, Matcher * const matcher3, Matcher * const matcher4, Matcher * const matcher5); + ANDMatcher& AND(Matcher * const matcher); + bool operator() (pkgCache::PkgIterator const &Pkg) APT_OVERRIDE; + bool operator() (pkgCache::GrpIterator const &Grp) APT_OVERRIDE; + bool operator() (pkgCache::VerIterator const &Ver) APT_OVERRIDE; + ~ANDMatcher() APT_OVERRIDE; +}; +class APT_PUBLIC ORMatcher : public Matcher { + std::vector matchers; +public: + // 5 ought to be enough for everybody… c++11 variadic templates would be nice + ORMatcher(); + explicit ORMatcher(Matcher * const matcher1); + ORMatcher(Matcher * const matcher1, Matcher * const matcher2); + ORMatcher(Matcher * const matcher1, Matcher * const matcher2, Matcher * const matcher3); + ORMatcher(Matcher * const matcher1, Matcher * const matcher2, Matcher * const matcher3, Matcher * const matcher4); + ORMatcher(Matcher * const matcher1, Matcher * const matcher2, Matcher * const matcher3, Matcher * const matcher4, Matcher * const matcher5); + ORMatcher& OR(Matcher * const matcher); + bool operator() (pkgCache::PkgIterator const &Pkg) APT_OVERRIDE; + bool operator() (pkgCache::GrpIterator const &Grp) APT_OVERRIDE; + bool operator() (pkgCache::VerIterator const &Ver) APT_OVERRIDE; + ~ORMatcher() APT_OVERRIDE; +}; + /*}}}*/ +class APT_PUBLIC PackageNameMatchesRegEx : public PackageMatcher { /*{{{*/ + regex_t* pattern; +public: + explicit PackageNameMatchesRegEx(std::string const &Pattern); + bool operator() (pkgCache::PkgIterator const &Pkg) APT_OVERRIDE; + bool operator() (pkgCache::GrpIterator const &Grp) APT_OVERRIDE; + ~PackageNameMatchesRegEx() APT_OVERRIDE; +}; + /*}}}*/ +class APT_PUBLIC PackageNameMatchesFnmatch : public PackageMatcher { /*{{{*/ + const std::string Pattern; +public: + explicit PackageNameMatchesFnmatch(std::string const &Pattern); + bool operator() (pkgCache::PkgIterator const &Pkg) APT_OVERRIDE; + bool operator() (pkgCache::GrpIterator const &Grp) APT_OVERRIDE; + ~PackageNameMatchesFnmatch() APT_OVERRIDE = default; +}; + /*}}}*/ +class APT_PUBLIC PackageArchitectureMatchesSpecification : public PackageMatcher { /*{{{*/ +/** \class PackageArchitectureMatchesSpecification + \brief matching against architecture specification strings + + The strings are of the format -- 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, musl-linux-amd64, linux-any, any-amd64, any */ + std::string literal; + std::string complete; + bool isPattern; +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); + using PackageMatcher::operator(); + bool operator() (pkgCache::PkgIterator const &Pkg) APT_OVERRIDE; + ~PackageArchitectureMatchesSpecification() APT_OVERRIDE; +}; + /*}}}*/ +class APT_PUBLIC PackageIsNewInstall : public PackageMatcher { /*{{{*/ + pkgCacheFile * const Cache; +public: + explicit PackageIsNewInstall(pkgCacheFile * const Cache); + using PackageMatcher::operator(); + bool operator() (pkgCache::PkgIterator const &Pkg) APT_OVERRIDE; + ~PackageIsNewInstall() APT_OVERRIDE; +}; + /*}}}*/ + +/// \brief Parse a pattern, return nullptr or pattern +APT_PUBLIC std::unique_ptr ParsePattern(APT::StringView pattern, pkgCacheFile *file); +} +} +#endif -- cgit v1.2.3