]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/cacheiterators.h
* apt-pkg/pkgcache.cc:
[apt.git] / apt-pkg / cacheiterators.h
index 43cbe1377ba033fd16e989774693ff3d411f5933..e5b23a81880a78ca2b94b80500329bcecd8a7c6c 100644 (file)
                                                                        /*}}}*/
 #ifndef PKGLIB_CACHEITERATORS_H
 #define PKGLIB_CACHEITERATORS_H
+#include<iterator>
 // abstract Iterator template                                          /*{{{*/
 /* This template provides the very basic iterator methods we
    need to have for doing some walk-over-the-cache magic */
-template<typename Str, typename Itr> class pkgCache::Iterator {
+template<typename Str, typename Itr> class pkgCache::Iterator :
+                       public std::iterator<std::forward_iterator_tag, Str> {
        protected:
        Str *S;
        pkgCache *Owner;
@@ -62,8 +64,9 @@ template<typename Str, typename Itr> class pkgCache::Iterator {
        inline Str const *operator ->() const {return S;};
        inline operator Str *() {return S == OwnerPointer() ? 0 : S;};
        inline operator Str const *() const {return S == OwnerPointer() ? 0 : S;};
+       inline Str &operator *() {return *S;};
        inline Str const &operator *() const {return *S;};
-       inline pkgCache *Cache() {return Owner;};
+       inline pkgCache *Cache() const {return Owner;};
 
        // Mixed stuff
        inline void operator =(const Itr &B) {S = B.S; Owner = B.Owner;};
@@ -101,6 +104,11 @@ class pkgCache::GrpIterator: public Iterator<Group, GrpIterator> {
        inline const char *Name() const {return S->Name == 0?0:Owner->StrP + S->Name;};
        inline PkgIterator PackageList() const;
        PkgIterator FindPkg(string Arch = "any");
+       /** \brief find the package with the "best" architecture
+
+           The best architecture is either the "native" or the first
+           in the list of Architectures which is not an end-Pointer */
+       PkgIterator FindPreferredPkg();
        PkgIterator NextPkg(PkgIterator const &Pkg);
 
        // Constructors
@@ -151,6 +159,7 @@ class pkgCache::PkgIterator: public Iterator<Package, PkgIterator> {
 
        //Nice printable representation
        friend std::ostream& operator <<(std::ostream& out, PkgIterator i);
+       std::string FullName(bool const &Pretty = false) const;
 
        // Constructors
        inline PkgIterator(pkgCache &Owner,Package *Trg) : Iterator<Package, PkgIterator>(Owner, Trg), HashIndex(0) {
@@ -344,7 +353,8 @@ class pkgCache::PkgFileIterator : public Iterator<PackageFile, PkgFileIterator>
 
        // Constructors
        inline PkgFileIterator() : Iterator<PackageFile, PkgFileIterator>() {};
-       inline PkgFileIterator(pkgCache &Owner,PackageFile *Trg = 0) : Iterator<PackageFile, PkgFileIterator>(Owner, Trg) {};
+       inline PkgFileIterator(pkgCache &Owner) : Iterator<PackageFile, PkgFileIterator>(Owner, Owner.PkgFileP) {};
+       inline PkgFileIterator(pkgCache &Owner,PackageFile *Trg) : Iterator<PackageFile, PkgFileIterator>(Owner, Trg) {};
 };
                                                                        /*}}}*/
 // Version File                                                                /*{{{*/