#include <set>
#include <string>
-#include <apti18n.h>
-
class OpProgress;
-struct APT_PUBLIC VersionSortDescriptionLocality /*{{{*/
+class VerIteratorWithCaching
+{
+ 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 pkgCache::VerIterator &v_lhs,
- const pkgCache::VerIterator &v_rhs)
+ 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;
/*}}}*/
// sorted by locality which makes iterating much faster
typedef APT::VersionContainer<
- std::set<pkgCache::VerIterator,
+ std::set<VerIteratorWithCaching,
VersionSortDescriptionLocality> > LocalitySortedVersionSet;
class Matcher {
// 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? */
public:
std::list<std::pair<pkgCache::VerIterator, std::string> > 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;
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);