]> git.saurik.com Git - apt.git/blob - apt-private/private-cacheset.h
Merge remote-tracking branch 'upstream/debian/experimental' into feature/srv-records
[apt.git] / apt-private / private-cacheset.h
1 #ifndef APT_PRIVATE_CACHESET_H
2 #define APT_PRIVATE_CACHESET_H
3
4 #include <apt-pkg/cacheset.h>
5 #include <apt-pkg/macros.h>
6
7 #include <apt-private/private-output.h>
8
9 #include <vector>
10 #include <list>
11 #include <set>
12 #include <string>
13
14 #include <apti18n.h>
15
16 class OpProgress;
17
18 struct APT_PUBLIC VersionSortDescriptionLocality /*{{{*/
19 {
20 bool operator () (const pkgCache::VerIterator &v_lhs,
21 const pkgCache::VerIterator &v_rhs)
22 {
23 pkgCache::DescFile const *A = nullptr;
24 pkgCache::DescFile const *B = nullptr;
25 if (v_lhs->DescriptionList != 0)
26 A = v_lhs.TranslatedDescription().FileList();
27 if (v_rhs->DescriptionList != 0)
28 B = v_rhs.TranslatedDescription().FileList();
29
30 if (A == nullptr && B == nullptr)
31 return false;
32
33 if (A == nullptr)
34 return true;
35
36 if (B == nullptr)
37 return false;
38
39 if (A->File == B->File)
40 return A->Offset < B->Offset;
41
42 return A->File < B->File;
43 }
44 };
45 /*}}}*/
46 // sorted by locality which makes iterating much faster
47 typedef APT::VersionContainer<
48 std::set<pkgCache::VerIterator,
49 VersionSortDescriptionLocality> > LocalitySortedVersionSet;
50
51 class Matcher {
52 public:
53 virtual bool operator () (const pkgCache::PkgIterator &/*P*/) {
54 return true;}
55 };
56
57 // FIXME: add default argument for OpProgress (or overloaded function)
58 bool GetLocalitySortedVersionSet(pkgCacheFile &CacheFile,
59 APT::VersionContainerInterface * const vci,
60 Matcher &matcher,
61 OpProgress * const progress);
62 bool GetLocalitySortedVersionSet(pkgCacheFile &CacheFile,
63 APT::VersionContainerInterface * const vci,
64 OpProgress * const progress);
65
66
67 // CacheSetHelper saving virtual packages /*{{{*/
68 class APT_PUBLIC CacheSetHelperVirtuals: public APT::CacheSetHelper {
69 public:
70 APT::PackageSet virtualPkgs;
71
72 virtual pkgCache::VerIterator canNotGetVersion(enum CacheSetHelper::VerSelector const select, pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg) APT_OVERRIDE;
73 virtual void canNotFindVersion(enum CacheSetHelper::VerSelector const select, APT::VersionContainerInterface * vci, pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg) APT_OVERRIDE;
74
75 CacheSetHelperVirtuals(bool const ShowErrors = true, GlobalError::MsgType const &ErrorType = GlobalError::NOTICE);
76 };
77 /*}}}*/
78
79 // CacheSetHelperAPTGet - responsible for message telling from the CacheSets/*{{{*/
80 class APT_PUBLIC CacheSetHelperAPTGet : public APT::CacheSetHelper {
81 /** \brief stream message should be printed to */
82 std::ostream &out;
83 /** \brief were things like Task or RegEx used to select packages? */
84 bool explicitlyNamed;
85
86 APT::PackageSet virtualPkgs;
87
88 public:
89 std::list<std::pair<pkgCache::VerIterator, std::string> > selectedByRelease;
90
91 CacheSetHelperAPTGet(std::ostream &out);
92
93 virtual void showTaskSelection(pkgCache::PkgIterator const &Pkg, std::string const &pattern) APT_OVERRIDE;
94 virtual void showFnmatchSelection(pkgCache::PkgIterator const &Pkg, std::string const &pattern) APT_OVERRIDE;
95 virtual void showRegExSelection(pkgCache::PkgIterator const &Pkg, std::string const &pattern) APT_OVERRIDE;
96 virtual void showSelectedVersion(pkgCache::PkgIterator const &/*Pkg*/, pkgCache::VerIterator const Ver,
97 std::string const &ver, bool const /*verIsRel*/) APT_OVERRIDE;
98 bool showVirtualPackageErrors(pkgCacheFile &Cache);
99
100 virtual pkgCache::VerIterator canNotFindCandidateVer(pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg) APT_OVERRIDE;
101 virtual pkgCache::VerIterator canNotFindNewestVer(pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg) APT_OVERRIDE;
102
103 APT::VersionSet tryVirtualPackage(pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg,
104 CacheSetHelper::VerSelector const select);
105
106 inline bool allPkgNamedExplicitly() const { return explicitlyNamed; }
107 };
108 /*}}}*/
109
110 #endif