9#ifndef APT_CACHEFILTER_PATTERNS_H
10#define APT_CACHEFILTER_PATTERNS_H
11#include <apt-pkg/cachefile.h>
13#include <apt-pkg/error.h>
14#include <apt-pkg/header-is-private.h>
15#include <apt-pkg/strutl.h>
45 explicit Node(
size_t start = 0,
size_t end = 0) : start(start), end(end) {}
47 virtual std::ostream &render(std::ostream &os) {
return os; };
48 std::nullptr_t error(std::string message);
49 virtual ~Node() =
default;
52 struct Error :
public std::exception
57 Error(
Node location, std::string message) : location(location), message(message) {}
58 const char *what()
const throw()
override {
return message.c_str(); }
63 std::string_view term;
64 std::vector<std::unique_ptr<Node>> arguments;
65 bool haveArgumentList =
false;
67 APT_HIDDEN std::ostream &render(std::ostream &stream)
override;
68 APT_HIDDEN
bool matches(std::string_view name,
int min,
int max);
73 std::string_view word;
75 APT_HIDDEN std::ostream &render(std::ostream &stream)
override;
89 explicit ZeroStringView(std::string_view s) : std::string_view(s) {}
90 char operator[](
size_t i)
93 if (likely(i < size()))
94 return std::string_view::operator[](i);
97 using std::string_view::size;
98 using std::string_view::substr;
105 while (sentence[state.offset] ==
' ' || sentence[state.offset] ==
'\t' || sentence[state.offset] ==
'\r' || sentence[state.offset] ==
'\n')
114 std::unique_ptr<Node> parseTop();
115 std::unique_ptr<Node> parse();
118 APT_HIDDEN std::unique_ptr<Node> parseOr();
119 APT_HIDDEN std::unique_ptr<Node> parseAnd();
120 APT_HIDDEN std::unique_ptr<Node> parseUnary();
121 APT_HIDDEN std::unique_ptr<Node> parsePrimary();
122 APT_HIDDEN std::unique_ptr<Node> parseGroup();
123 APT_HIDDEN std::unique_ptr<Node> parsePattern();
124 APT_HIDDEN std::unique_ptr<Node> parseShortPattern();
125 APT_HIDDEN std::unique_ptr<Node> parseArgument(
bool shrt);
126 APT_HIDDEN std::unique_ptr<Node> parseWord(
bool shrt);
127 APT_HIDDEN std::unique_ptr<Node> parseQuotedWord();
141 std::unique_ptr<APT::CacheFilter::Matcher> aPattern(std::unique_ptr<PatternTreeParser::Node> &nodeP);
142 std::string aWord(std::unique_ptr<PatternTreeParser::Node> &nodeP);
147using namespace APT::CacheFilter;
152 std::optional<regex_t> pattern;
157 bool operator()(
const char *cstring);
158 bool operator()(std::string
const &
string)
160 return (*
this)(
string.c_str());
168 bool operator()(pkgCache::PkgIterator
const &Pkg)
override
170 assert(Cache !=
nullptr);
171 return ((*Cache)[Pkg].Flags & pkgCache::Flag::Auto) != 0;
179 bool operator()(pkgCache::PkgIterator
const &Pkg)
override
181 assert(Cache !=
nullptr);
182 auto state = (*Cache)[Pkg];
183 return state.InstBroken() || state.NowBroken();
189 bool operator()(pkgCache::PkgIterator
const &Pkg)
override
191 return Pkg->CurrentState == pkgCache::State::ConfigFiles;
199 bool operator()(pkgCache::PkgIterator
const &Pkg)
override
201 assert(Cache !=
nullptr);
202 return (*Cache)[Pkg].Garbage;
207 bool operator()(pkgCache::PkgIterator
const &Pkg)
override
209 return (Pkg->Flags & pkgCache::Flag::Essential) != 0;
217 bool operator()(pkgCache::PkgIterator
const &Pkg)
override
219 return Pkg.Name() == name;
227 bool operator()(pkgCache::PkgIterator
const &Pkg)
override
229 assert(Cache !=
nullptr);
230 return Pkg->CurrentVer != 0;
232 bool operator()(pkgCache::VerIterator
const &Ver)
override
234 assert(Cache !=
nullptr);
235 return Ver == Ver.ParentPkg().CurrentVer();
241 bool operator()(pkgCache::PkgIterator
const &pkg)
override
245 if (pkg.CurrentVer().end())
250 for (
auto ver = pkg.VersionList(); !ver.end(); ver++)
252 if (ver.Downloadable())
264 bool operator()(pkgCache::PkgIterator
const &pkg)
override
266 return (*Cache)->PhasingApplied(pkg);
274 bool operator()(pkgCache::PkgIterator
const &Pkg)
override
276 assert(Cache !=
nullptr);
277 return Pkg->CurrentVer != 0 && (*Cache)[Pkg].Upgradable();
283 bool operator()(pkgCache::PkgIterator
const &Pkg)
override
285 return Pkg->VersionList == 0;
291 bool operator()(pkgCache::GrpIterator
const &)
override {
return false; }
292 bool operator()(pkgCache::VerIterator
const &Ver)
override = 0;
293 bool operator()(pkgCache::PkgIterator
const &Pkg)
override
295 for (
auto Ver = Pkg.VersionList(); not Ver.end(); Ver++)
306 std::unique_ptr<APT::CacheFilter::Matcher> base;
307 VersionIsAllVersions(std::unique_ptr<APT::CacheFilter::Matcher> base) : base(std::move(base)) {}
308 bool operator()(pkgCache::GrpIterator
const &)
override {
return false; }
309 bool operator()(pkgCache::VerIterator
const &Ver)
override
313 bool operator()(pkgCache::PkgIterator
const &Pkg)
override
315 for (
auto Ver = Pkg.VersionList(); not Ver.end(); Ver++)
326 std::unique_ptr<APT::CacheFilter::Matcher> base;
327 pkgCache::Dep::DepType type;
328 VersionDepends(std::unique_ptr<APT::CacheFilter::Matcher> base, pkgCache::Dep::DepType type = pkgCache::Dep::Depends) : base(std::move(base)), type(type) {}
329 bool operator()(pkgCache::GrpIterator
const &)
override {
return false; }
330 bool operator()(pkgCache::VerIterator
const &Ver)
override
332 for (
auto D = Ver.DependsList(); not D.end(); D++)
338 if ((*base)(D.TargetPkg()))
348 std::unique_ptr<APT::CacheFilter::Matcher> base;
349 pkgCache::Dep::DepType type;
350 PackageReverseDepends(std::unique_ptr<APT::CacheFilter::Matcher> base, pkgCache::Dep::DepType type = pkgCache::Dep::Depends) : base(std::move(base)), type(type) {}
351 bool operator()(pkgCache::PkgIterator
const &Pkg)
override
353 for (
auto D = Pkg.RevDependsList(); not D.end(); D++)
359 if ((*base)(D.ParentVer()))
369 std::unique_ptr<APT::CacheFilter::Matcher> base;
370 VersionIsAnyVersion(std::unique_ptr<APT::CacheFilter::Matcher> base) : base(std::move(base)) {}
371 bool operator()(pkgCache::VerIterator
const &Ver)
override
381 bool operator()(pkgCache::VerIterator
const &Ver)
override
383 for (
auto VF = Ver.FileList(); not VF.end(); VF++)
385 if (VF.File().Archive() && matcher(VF.File().Archive()))
396 bool operator()(pkgCache::VerIterator
const &Ver)
override
398 for (
auto VF = Ver.FileList(); not VF.end(); VF++)
400 if (VF.File().Codename() && matcher(VF.File().Codename()))
411 bool operator()(pkgCache::VerIterator
const &Ver)
override
413 for (
auto VF = Ver.FileList(); not VF.end(); VF++)
415 if (VF.File().Origin() && matcher(VF.File().Origin()))
426 bool operator()(pkgCache::VerIterator
const &Ver)
override
428 return matcher(Ver.Section());
435 bool operator()(pkgCache::VerIterator
const &Ver)
override
437 return Ver.IsSecurityUpdate();
445 bool operator()(pkgCache::VerIterator
const &Ver)
override
447 return matcher(Ver.SourcePkgName());
455 bool operator()(pkgCache::VerIterator
const &Ver)
override
457 return matcher(Ver.SourceVerStr());
465 bool operator()(pkgCache::VerIterator
const &Ver)
override
467 return matcher(Ver.VerStr());
475 bool operator()(pkgCache::VerIterator
const &Ver)
override
477 return Ver->Priority > 0 && name == pkgCache::Priority_NoL10n(Ver->Priority);
Definition cachefilter.h:23
Definition cachefilter.h:31
Basic helper class for matching regex.
Definition cachefilter-patterns.h:151
Definition cachefile.h:33
PatternParser parses the given sentence into a parse tree.
Definition cachefilter-patterns.h:138
Definition cachefilter-patterns.h:53
Definition cachefilter-patterns.h:41
Definition cachefilter-patterns.h:62
Definition cachefilter-patterns.h:79
Definition cachefilter-patterns.h:72
Zero-terminated wrapper for std::string_view.
Definition cachefilter-patterns.h:88
PatternTreeParser parses the given sentence into a parse tree.
Definition cachefilter-patterns.h:38
Definition cachefilter-patterns.h:214
Definition cachefilter-patterns.h:165
Definition cachefilter-patterns.h:176
Definition cachefilter-patterns.h:188
Definition cachefilter-patterns.h:206
Definition cachefilter-patterns.h:196
Definition cachefilter-patterns.h:224
Definition cachefilter-patterns.h:240
Definition cachefilter-patterns.h:261
Definition cachefilter-patterns.h:271
Definition cachefilter-patterns.h:282
Definition cachefilter-patterns.h:347
Definition cachefilter-patterns.h:290
Definition cachefilter-patterns.h:325
Definition cachefilter-patterns.h:305
Definition cachefilter-patterns.h:368
Definition cachefilter-patterns.h:378
Definition cachefilter-patterns.h:393
Definition cachefilter-patterns.h:408
Definition cachefilter-patterns.h:472
Definition cachefilter-patterns.h:423
Definition cachefilter-patterns.h:433
Definition cachefilter-patterns.h:442
Definition cachefilter-patterns.h:452
Definition cachefilter-patterns.h:462