X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/a02db58fd50ef7fc2f0284852c6b3f98e458a232..a9b724eedd0c9d8c36725c5b8f57d51ea9f7dcd1:/apt-private/private-cachefile.h diff --git a/apt-private/private-cachefile.h b/apt-private/private-cachefile.h index 67c5e8cdc..77e8b61d9 100644 --- a/apt-private/private-cachefile.h +++ b/apt-private/private-cachefile.h @@ -5,20 +5,16 @@ #include #include #include - +#include +#include +#include // class CacheFile - Cover class for some dependency cache functions /*{{{*/ -// --------------------------------------------------------------------- -/* */ -class CacheFile : public pkgCacheFile +class APT_PUBLIC CacheFile : public pkgCacheFile { - static pkgCache *SortCache; - static int NameComp(const void *a,const void *b) APT_PURE; - public: - pkgCache::Package **List; - - void Sort(); + std::vector UniverseList; + bool CheckDeps(bool AllowBroken = false); bool BuildCaches(bool WithLock = true) { @@ -27,14 +23,10 @@ class CacheFile : public pkgCacheFile return false; 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() { @@ -43,11 +35,38 @@ class CacheFile : public pkgCacheFile else return Open(true); } - CacheFile() : List(0) {}; - ~CacheFile() { - delete[] List; - } }; /*}}}*/ +class SortedPackageUniverse : public APT::PackageUniverse +{ + std::vector &List; + void LazyInit() const; + +public: + explicit SortedPackageUniverse(CacheFile &Cache); + + class const_iterator : public APT::Container_iterator_base::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::const_iterator i): + Container_iterator_base::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