X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/6cfadda161ce19e6c8076d0aa118f8f436805a6a..92296fe4b0862a04ea3d965b4cd2d4a420e3be9f:/apt-private/private-cacheset.h diff --git a/apt-private/private-cacheset.h b/apt-private/private-cacheset.h index 892993e58..4a43155fe 100644 --- a/apt-private/private-cacheset.h +++ b/apt-private/private-cacheset.h @@ -15,17 +15,28 @@ class OpProgress; -struct APT_PUBLIC VersionSortDescriptionLocality /*{{{*/ +class VerIteratorWithCaching { - bool operator () (const pkgCache::VerIterator &v_lhs, - const pkgCache::VerIterator &v_rhs) + const pkgCache::VerIterator iter; + const pkgCache::DescFile * descFile; +public: + VerIteratorWithCaching(const pkgCache::VerIterator& iter) : + iter(iter), + descFile(iter->DescriptionList != 0 + ? (const pkgCache::DescFile *) iter.TranslatedDescription().FileList() + : nullptr) + {} + const pkgCache::DescFile * CachedDescFile() const { return descFile; } + operator pkgCache::VerIterator() const { return iter; } +}; + +struct VersionSortDescriptionLocality /*{{{*/ +{ + bool operator () (const VerIteratorWithCaching &v_lhs, + const VerIteratorWithCaching &v_rhs) { - pkgCache::DescFile const *A = nullptr; - pkgCache::DescFile const *B = nullptr; - if (v_lhs->DescriptionList != 0) - A = v_lhs.TranslatedDescription().FileList(); - if (v_rhs->DescriptionList != 0) - B = v_rhs.TranslatedDescription().FileList(); + pkgCache::DescFile const *A = v_lhs.CachedDescFile(); + pkgCache::DescFile const *B = v_rhs.CachedDescFile(); if (A == nullptr && B == nullptr) return false; @@ -45,7 +56,7 @@ struct APT_PUBLIC VersionSortDescriptionLocality /*{{{*/ /*}}}*/ // sorted by locality which makes iterating much faster typedef APT::VersionContainer< - std::set > LocalitySortedVersionSet; class Matcher { @@ -65,19 +76,20 @@ bool GetLocalitySortedVersionSet(pkgCacheFile &CacheFile, // CacheSetHelper saving virtual packages /*{{{*/ -class APT_PUBLIC CacheSetHelperVirtuals: public APT::CacheSetHelper { +class CacheSetHelperVirtuals: public APT::CacheSetHelper { public: APT::PackageSet virtualPkgs; virtual pkgCache::VerIterator canNotGetVersion(enum CacheSetHelper::VerSelector const select, pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg) APT_OVERRIDE; virtual void canNotFindVersion(enum CacheSetHelper::VerSelector const select, APT::VersionContainerInterface * vci, pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg) APT_OVERRIDE; + virtual pkgCache::PkgIterator canNotFindPkgName(pkgCacheFile &Cache, std::string const &str) APT_OVERRIDE; CacheSetHelperVirtuals(bool const ShowErrors = true, GlobalError::MsgType const &ErrorType = GlobalError::NOTICE); }; /*}}}*/ // CacheSetHelperAPTGet - responsible for message telling from the CacheSets/*{{{*/ -class APT_PUBLIC CacheSetHelperAPTGet : public APT::CacheSetHelper { +class CacheSetHelperAPTGet : public APT::CacheSetHelper { /** \brief stream message should be printed to */ std::ostream &out; /** \brief were things like Task or RegEx used to select packages? */ @@ -88,7 +100,7 @@ class APT_PUBLIC CacheSetHelperAPTGet : public APT::CacheSetHelper { public: std::list > selectedByRelease; - CacheSetHelperAPTGet(std::ostream &out); + explicit CacheSetHelperAPTGet(std::ostream &out); virtual void showTaskSelection(pkgCache::PkgIterator const &Pkg, std::string const &pattern) APT_OVERRIDE; virtual void showFnmatchSelection(pkgCache::PkgIterator const &Pkg, std::string const &pattern) APT_OVERRIDE; @@ -99,6 +111,7 @@ public: virtual pkgCache::VerIterator canNotFindCandidateVer(pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg) APT_OVERRIDE; virtual pkgCache::VerIterator canNotFindNewestVer(pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg) APT_OVERRIDE; + virtual pkgCache::PkgIterator canNotFindPkgName(pkgCacheFile &Cache, std::string const &str) APT_OVERRIDE; APT::VersionSet tryVirtualPackage(pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg, CacheSetHelper::VerSelector const select);