]> git.saurik.com Git - apt.git/blobdiff - apt-private/private-cachefile.h
more explicit MarkRequired algorithm code
[apt.git] / apt-private / private-cachefile.h
index 1fddabfbd5428de9c0e10fd7c1458b9b29b2f2eb..27642e0258d53e25a3b4ec16ad89dcf07d871c9d 100644 (file)
@@ -7,32 +7,16 @@
 #include <apt-pkg/pkgcache.h>
 #include <apt-pkg/macros.h>
 #include <apt-pkg/sourcelist.h>
-#include <apti18n.h>
-
-// FIXME: we need to find a way to export this 
-class APT_PUBLIC SourceList : public pkgSourceList
-{
-   
- public:
-   // Add custom metaIndex (e.g. local files)
-   void AddMetaIndex(metaIndex *mi) {
-      SrcList.push_back(mi);
-   }
+#include <apt-pkg/cacheset.h>
 
-};
+#include <apti18n.h>
 
 // class CacheFile - Cover class for some dependency cache functions   /*{{{*/
-// ---------------------------------------------------------------------
-/* */
 class APT_PUBLIC CacheFile : public pkgCacheFile
 {
-   static pkgCache *SortCache;
-   APT_HIDDEN static int NameComp(const void *a,const void *b) APT_PURE;
-
    public:
-   pkgCache::Package **List;
-   
-   void Sort();
+   std::vector<map_pointer_t> UniverseList;
+
    bool CheckDeps(bool AllowBroken = false);
    bool BuildCaches(bool WithLock = true)
    {
@@ -41,24 +25,10 @@ class APT_PUBLIC CacheFile : public pkgCacheFile
         return false;
       return true;
    }
-   // FIXME: this can go once the "libapt-pkg" pkgSourceList has a way
-   //        to add custom metaIndexes (or custom local files or so)
-   bool BuildSourceList(OpProgress */*Progress*/ = NULL) {
-      if (SrcList != NULL)
-         return true;
-      SrcList = new SourceList();
-      if (SrcList->ReadMainList() == false)
-         return _error->Error(_("The list of sources could not be read."));
-      return true;
-   }
-   bool Open(bool WithLock = true) 
+   bool Open(bool WithLock = true)
    {
       OpTextProgress Prog(*_config);
-      if (pkgCacheFile::Open(&Prog,WithLock) == false)
-        return false;
-      Sort();
-      
-      return true;
+      return pkgCacheFile::Open(&Prog,WithLock);
    };
    bool OpenForInstall()
    {
@@ -67,11 +37,38 @@ class APT_PUBLIC CacheFile : public pkgCacheFile
       else
         return Open(true);
    }
-   CacheFile() : List(0) {};
-   ~CacheFile() {
-      delete[] List;
-   }
 };
                                                                        /*}}}*/
 
+class SortedPackageUniverse : public APT::PackageUniverse
+{
+   std::vector<map_pointer_t> &List;
+   void LazyInit() const;
+
+public:
+   explicit SortedPackageUniverse(CacheFile &Cache);
+
+   class const_iterator : public APT::Container_iterator_base<APT::PackageContainerInterface, SortedPackageUniverse, SortedPackageUniverse::const_iterator, std::vector<map_pointer_t>::const_iterator, pkgCache::PkgIterator>
+   {
+      pkgCache * const Cache;
+      public:
+        inline pkgCache::PkgIterator getType(void) const
+        {
+           if (*_iter == 0) return pkgCache::PkgIterator(*Cache);
+           return pkgCache::PkgIterator(*Cache, Cache->PkgP + *_iter);
+        }
+        explicit const_iterator(pkgCache * const Owner, std::vector<map_pointer_t>::const_iterator i):
+           Container_iterator_base<APT::PackageContainerInterface, SortedPackageUniverse, SortedPackageUniverse::const_iterator, std::vector<map_pointer_t>::const_iterator, pkgCache::PkgIterator>(i), Cache(Owner) {}
+
+   };
+   typedef const_iterator iterator;
+
+   const_iterator begin() const { LazyInit(); return const_iterator(data(), List.begin()); }
+   const_iterator end() const { LazyInit(); return const_iterator(data(), List.end()); }
+   const_iterator cbegin() const { LazyInit(); return const_iterator(data(), List.begin()); }
+   const_iterator cend() const { LazyInit(); return const_iterator(data(), List.end()); }
+   iterator begin() { LazyInit(); return iterator(data(), List.begin()); }
+   iterator end() { LazyInit(); return iterator(data(), List.end()); }
+};
+
 #endif