]> git.saurik.com Git - apt.git/blobdiff - apt-private/private-cacheset.h
prevent C++ locale number formatting in text APIs
[apt.git] / apt-private / private-cacheset.h
index 892993e58739000853668ce5b861bc076dbfcd8b..4a43155febbdd2142fd60d91af45c0e6681d4ebb 100644 (file)
 
 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<pkgCache::VerIterator,
+   std::set<VerIteratorWithCaching,
             VersionSortDescriptionLocality> > 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<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;
@@ -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);