cachefilter.h 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. // -*- mode: cpp; mode: fold -*-
  2. // Description /*{{{*/
  3. /** \file cachefilter.h
  4. Collection of functor classes */
  5. /*}}}*/
  6. #ifndef APT_CACHEFILTER_H
  7. #define APT_CACHEFILTER_H
  8. // Include Files /*{{{*/
  9. #include <apt-pkg/pkgcache.h>
  10. #include <apt-pkg/cacheiterators.h>
  11. #include <string>
  12. #include <vector>
  13. #include <regex.h>
  14. class pkgCacheFile;
  15. /*}}}*/
  16. namespace APT {
  17. namespace CacheFilter {
  18. class Matcher {
  19. public:
  20. virtual bool operator() (pkgCache::PkgIterator const &/*Pkg*/) = 0;
  21. virtual bool operator() (pkgCache::GrpIterator const &/*Grp*/) = 0;
  22. virtual bool operator() (pkgCache::VerIterator const &/*Ver*/) = 0;
  23. virtual ~Matcher();
  24. };
  25. class PackageMatcher : public Matcher {
  26. public:
  27. virtual bool operator() (pkgCache::PkgIterator const &Pkg) APT_OVERRIDE = 0;
  28. virtual bool operator() (pkgCache::VerIterator const &Ver) APT_OVERRIDE { return (*this)(Ver.ParentPkg()); }
  29. virtual bool operator() (pkgCache::GrpIterator const &/*Grp*/) APT_OVERRIDE { return false; }
  30. virtual ~PackageMatcher();
  31. };
  32. // Generica like True, False, NOT, AND, OR /*{{{*/
  33. class TrueMatcher : public Matcher {
  34. public:
  35. virtual bool operator() (pkgCache::PkgIterator const &Pkg) APT_OVERRIDE;
  36. virtual bool operator() (pkgCache::GrpIterator const &Grp) APT_OVERRIDE;
  37. virtual bool operator() (pkgCache::VerIterator const &Ver) APT_OVERRIDE;
  38. };
  39. class FalseMatcher : public Matcher {
  40. public:
  41. virtual bool operator() (pkgCache::PkgIterator const &Pkg) APT_OVERRIDE;
  42. virtual bool operator() (pkgCache::GrpIterator const &Grp) APT_OVERRIDE;
  43. virtual bool operator() (pkgCache::VerIterator const &Ver) APT_OVERRIDE;
  44. };
  45. class NOTMatcher : public Matcher {
  46. Matcher * const matcher;
  47. public:
  48. explicit NOTMatcher(Matcher * const matcher);
  49. virtual bool operator() (pkgCache::PkgIterator const &Pkg) APT_OVERRIDE;
  50. virtual bool operator() (pkgCache::GrpIterator const &Grp) APT_OVERRIDE;
  51. virtual bool operator() (pkgCache::VerIterator const &Ver) APT_OVERRIDE;
  52. virtual ~NOTMatcher();
  53. };
  54. class ANDMatcher : public Matcher {
  55. std::vector<Matcher *> matchers;
  56. public:
  57. // 5 ought to be enough for everybody… c++11 variadic templates would be nice
  58. ANDMatcher();
  59. explicit ANDMatcher(Matcher * const matcher1);
  60. ANDMatcher(Matcher * const matcher1, Matcher * const matcher2);
  61. ANDMatcher(Matcher * const matcher1, Matcher * const matcher2, Matcher * const matcher3);
  62. ANDMatcher(Matcher * const matcher1, Matcher * const matcher2, Matcher * const matcher3, Matcher * const matcher4);
  63. ANDMatcher(Matcher * const matcher1, Matcher * const matcher2, Matcher * const matcher3, Matcher * const matcher4, Matcher * const matcher5);
  64. ANDMatcher& AND(Matcher * const matcher);
  65. virtual bool operator() (pkgCache::PkgIterator const &Pkg) APT_OVERRIDE;
  66. virtual bool operator() (pkgCache::GrpIterator const &Grp) APT_OVERRIDE;
  67. virtual bool operator() (pkgCache::VerIterator const &Ver) APT_OVERRIDE;
  68. virtual ~ANDMatcher();
  69. };
  70. class ORMatcher : public Matcher {
  71. std::vector<Matcher *> matchers;
  72. public:
  73. // 5 ought to be enough for everybody… c++11 variadic templates would be nice
  74. ORMatcher();
  75. explicit ORMatcher(Matcher * const matcher1);
  76. ORMatcher(Matcher * const matcher1, Matcher * const matcher2);
  77. ORMatcher(Matcher * const matcher1, Matcher * const matcher2, Matcher * const matcher3);
  78. ORMatcher(Matcher * const matcher1, Matcher * const matcher2, Matcher * const matcher3, Matcher * const matcher4);
  79. ORMatcher(Matcher * const matcher1, Matcher * const matcher2, Matcher * const matcher3, Matcher * const matcher4, Matcher * const matcher5);
  80. ORMatcher& OR(Matcher * const matcher);
  81. virtual bool operator() (pkgCache::PkgIterator const &Pkg) APT_OVERRIDE;
  82. virtual bool operator() (pkgCache::GrpIterator const &Grp) APT_OVERRIDE;
  83. virtual bool operator() (pkgCache::VerIterator const &Ver) APT_OVERRIDE;
  84. virtual ~ORMatcher();
  85. };
  86. /*}}}*/
  87. class PackageNameMatchesRegEx : public PackageMatcher { /*{{{*/
  88. regex_t* pattern;
  89. public:
  90. explicit PackageNameMatchesRegEx(std::string const &Pattern);
  91. virtual bool operator() (pkgCache::PkgIterator const &Pkg) APT_OVERRIDE;
  92. virtual bool operator() (pkgCache::GrpIterator const &Grp) APT_OVERRIDE;
  93. virtual ~PackageNameMatchesRegEx();
  94. };
  95. /*}}}*/
  96. class PackageNameMatchesFnmatch : public PackageMatcher { /*{{{*/
  97. const std::string Pattern;
  98. public:
  99. explicit PackageNameMatchesFnmatch(std::string const &Pattern);
  100. virtual bool operator() (pkgCache::PkgIterator const &Pkg) APT_OVERRIDE;
  101. virtual bool operator() (pkgCache::GrpIterator const &Grp) APT_OVERRIDE;
  102. virtual ~PackageNameMatchesFnmatch() {};
  103. };
  104. /*}}}*/
  105. class PackageArchitectureMatchesSpecification : public PackageMatcher { /*{{{*/
  106. /** \class PackageArchitectureMatchesSpecification
  107. \brief matching against architecture specification strings
  108. The strings are of the format <libc>-<kernel>-<cpu> where either component,
  109. or the whole string, can be the wildcard "any" as defined in
  110. debian-policy §11.1 "Architecture specification strings".
  111. Examples: i386, mipsel, musl-linux-amd64, linux-any, any-amd64, any */
  112. std::string literal;
  113. std::string complete;
  114. bool isPattern;
  115. public:
  116. /** \brief matching against architecture specification strings
  117. *
  118. * @param pattern is the architecture specification string
  119. * @param isPattern defines if the given \b pattern is a
  120. * architecture specification pattern to match others against
  121. * or if it is the fixed string and matched against patterns
  122. */
  123. PackageArchitectureMatchesSpecification(std::string const &pattern, bool const isPattern = true);
  124. bool operator() (char const * const &arch);
  125. virtual bool operator() (pkgCache::PkgIterator const &Pkg) APT_OVERRIDE;
  126. virtual ~PackageArchitectureMatchesSpecification();
  127. };
  128. /*}}}*/
  129. class PackageIsNewInstall : public PackageMatcher { /*{{{*/
  130. pkgCacheFile * const Cache;
  131. public:
  132. explicit PackageIsNewInstall(pkgCacheFile * const Cache);
  133. virtual bool operator() (pkgCache::PkgIterator const &Pkg) APT_OVERRIDE;
  134. virtual ~PackageIsNewInstall();
  135. };
  136. /*}}}*/
  137. }
  138. }
  139. #endif