]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/cacheiterators.h
merged from the debian-experimental2 branch
[apt.git] / apt-pkg / cacheiterators.h
index eb8dee5e38e36934b4e1e8fb0c95500bfb72a996..b97a1a5894888b530fab5ed3165023d852bad4e3 100644 (file)
@@ -75,8 +75,8 @@ template<typename Str, typename Itr> class pkgCache::Iterator :
        inline bool IsGood() const { return S && Owner && ! end();};
        inline unsigned long Index() const {return S - OwnerPointer();};
 
-       void ReOwn(pkgCache &newOwner, void const * const oldMap, void const * const newMap) {
-               if (S == 0)
+       void ReMap(void const * const oldMap, void const * const newMap) {
+               if (Owner == 0 || S == 0)
                        return;
                S += (Str*)(newMap) - (Str*)(oldMap);
        }
@@ -96,7 +96,7 @@ class pkgCache::GrpIterator: public Iterator<Group, GrpIterator> {
 
        protected:
        inline Group* OwnerPointer() const {
-               return Owner->GrpP;
+               return (Owner != 0) ? Owner->GrpP : 0;
        };
 
        public:
@@ -115,8 +115,11 @@ class pkgCache::GrpIterator: public Iterator<Group, GrpIterator> {
        /** \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() const;
+           in the list of Architectures which is not an end-Pointer
+
+           \param PreferNonVirtual tries to respond with a non-virtual package
+                  and only if this fails returns the best virtual package */
+       PkgIterator FindPreferredPkg(bool const &PreferNonVirtual = true) const;
        PkgIterator NextPkg(PkgIterator const &Pkg) const;
 
        // Constructors
@@ -134,7 +137,7 @@ class pkgCache::PkgIterator: public Iterator<Package, PkgIterator> {
 
        protected:
        inline Package* OwnerPointer() const {
-               return Owner->PkgP;
+               return (Owner != 0) ? Owner->PkgP : 0;
        };
 
        public:
@@ -181,7 +184,7 @@ class pkgCache::PkgIterator: public Iterator<Package, PkgIterator> {
 class pkgCache::VerIterator : public Iterator<Version, VerIterator> {
        protected:
        inline Version* OwnerPointer() const {
-               return Owner->VerP;
+               return (Owner != 0) ? Owner->VerP : 0;
        };
 
        public:
@@ -203,15 +206,10 @@ class pkgCache::VerIterator : public Iterator<Version, VerIterator> {
        inline const char *VerStr() const {return S->VerStr == 0?0:Owner->StrP + S->VerStr;};
        inline const char *Section() const {return S->Section == 0?0:Owner->StrP + S->Section;};
        inline const char *Arch() const {
-               if(S->MultiArch == pkgCache::Version::All)
+               if (S->MultiArch == pkgCache::Version::All)
                        return "all";
                return S->ParentPkg == 0?0:Owner->StrP + ParentPkg()->Arch;
        };
-       inline const char *Arch(bool const pseudo) const {
-               if(pseudo == false)
-                       return Arch();
-               return S->ParentPkg == 0?0:Owner->StrP + ParentPkg()->Arch;
-       };
        inline PkgIterator ParentPkg() const {return PkgIterator(*Owner,Owner->PkgP + S->ParentPkg);};
 
        inline DescIterator DescriptionList() const;
@@ -224,7 +222,6 @@ class pkgCache::VerIterator : public Iterator<Version, VerIterator> {
        string RelStr() const;
 
        bool Automatic() const;
-       bool Pseudo() const;
        VerFileIterator NewestFile() const;
 
        inline VerIterator(pkgCache &Owner,Version *Trg = 0) : Iterator<Version, VerIterator>(Owner, Trg) {
@@ -238,7 +235,7 @@ class pkgCache::VerIterator : public Iterator<Version, VerIterator> {
 class pkgCache::DescIterator : public Iterator<Description, DescIterator> {
        protected:
        inline Description* OwnerPointer() const {
-               return Owner->DescP;
+               return (Owner != 0) ? Owner->DescP : 0;
        };
 
        public:
@@ -267,7 +264,7 @@ class pkgCache::DepIterator : public Iterator<Dependency, DepIterator> {
 
        protected:
        inline Dependency* OwnerPointer() const {
-               return Owner->DepP;
+               return (Owner != 0) ? Owner->DepP : 0;
        };
 
        public:
@@ -284,12 +281,16 @@ class pkgCache::DepIterator : public Iterator<Dependency, DepIterator> {
        inline PkgIterator ParentPkg() const {return PkgIterator(*Owner,Owner->PkgP + Owner->VerP[S->ParentVer].ParentPkg);};
        inline bool Reverse() const {return Type == DepRev;};
        bool IsCritical() const;
+       bool IsNegative() const;
        void GlobOr(DepIterator &Start,DepIterator &End);
        Version **AllTargets() const;
        bool SmartTargetPkg(PkgIterator &Result) const;
        inline const char *CompType() const {return Owner->CompType(S->CompareOp);};
        inline const char *DepType() const {return Owner->DepType(S->Type);};
 
+       //Nice printable representation
+       friend std::ostream& operator <<(std::ostream& out, DepIterator D);
+
        inline DepIterator(pkgCache &Owner, Dependency *Trg, Version* = 0) :
                Iterator<Dependency, DepIterator>(Owner, Trg), Type(DepVer) {
                if (S == 0)
@@ -309,7 +310,7 @@ class pkgCache::PrvIterator : public Iterator<Provides, PrvIterator> {
 
        protected:
        inline Provides* OwnerPointer() const {
-               return Owner->ProvideP;
+               return (Owner != 0) ? Owner->ProvideP : 0;
        };
 
        public:
@@ -343,7 +344,7 @@ class pkgCache::PrvIterator : public Iterator<Provides, PrvIterator> {
 class pkgCache::PkgFileIterator : public Iterator<PackageFile, PkgFileIterator> {
        protected:
        inline PackageFile* OwnerPointer() const {
-               return Owner->PkgFileP;
+               return (Owner != 0) ? Owner->PkgFileP : 0;
        };
 
        public:
@@ -376,7 +377,7 @@ class pkgCache::PkgFileIterator : public Iterator<PackageFile, PkgFileIterator>
 class pkgCache::VerFileIterator : public pkgCache::Iterator<VerFile, VerFileIterator> {
        protected:
        inline VerFile* OwnerPointer() const {
-               return Owner->VerFileP;
+               return (Owner != 0) ? Owner->VerFileP : 0;
        };
 
        public:
@@ -395,7 +396,7 @@ class pkgCache::VerFileIterator : public pkgCache::Iterator<VerFile, VerFileIter
 class pkgCache::DescFileIterator : public Iterator<DescFile, DescFileIterator> {
        protected:
        inline DescFile* OwnerPointer() const {
-               return Owner->DescFileP;
+               return (Owner != 0) ? Owner->DescFileP : 0;
        };
 
        public: