]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/cacheiterators.h
fixup foldmarkers in acquire-item.cc
[apt.git] / apt-pkg / cacheiterators.h
index 64fec5daabf9070927e15502c72fb2906974308b..b0c02d4a20f591e261101d9ce5978e73e3941052 100644 (file)
                                                                        /*}}}*/
 #ifndef PKGLIB_CACHEITERATORS_H
 #define PKGLIB_CACHEITERATORS_H
                                                                        /*}}}*/
 #ifndef PKGLIB_CACHEITERATORS_H
 #define PKGLIB_CACHEITERATORS_H
+#include<apt-pkg/pkgcache.h>
+#include<apt-pkg/macros.h>
+
 #include<iterator>
 #include<iterator>
+#include <iosfwd>
+#include <string>
 
 #include<string.h>
 
 
 #include<string.h>
 
@@ -154,20 +159,24 @@ class pkgCache::PkgIterator: public Iterator<Package, PkgIterator> {
        enum OkState {NeedsNothing,NeedsUnpack,NeedsConfigure};
 
        // Accessors
        enum OkState {NeedsNothing,NeedsUnpack,NeedsConfigure};
 
        // Accessors
-       inline const char *Name() const {return S->Name == 0?0:Owner->StrP + S->Name;}
-       inline const char *Section() const {return S->Section == 0?0:Owner->StrP + S->Section;}
+       inline const char *Name() const { return Group().Name(); }
+       // Versions have sections - and packages can have different versions with different sections
+       // so this interface is broken by design. It used to return the section of the "first parsed
+       // package stanza", but as this can potentially be anything it now returns the section of the
+       // newest version instead (if any). aka: Run as fast as you can to Version.Section().
+       APT_DEPRECATED const char *Section() const;
        inline bool Purge() const {return S->CurrentState == pkgCache::State::Purge ||
                (S->CurrentVer == 0 && S->CurrentState == pkgCache::State::NotInstalled);}
        inline const char *Arch() const {return S->Arch == 0?0:Owner->StrP + S->Arch;}
        inline bool Purge() const {return S->CurrentState == pkgCache::State::Purge ||
                (S->CurrentVer == 0 && S->CurrentState == pkgCache::State::NotInstalled);}
        inline const char *Arch() const {return S->Arch == 0?0:Owner->StrP + S->Arch;}
-       inline GrpIterator Group() const { return GrpIterator(*Owner, Owner->GrpP + S->Group);}
+       inline APT_PURE GrpIterator Group() const { return GrpIterator(*Owner, Owner->GrpP + S->Group);}
 
 
-       inline VerIterator VersionList() const;
-       inline VerIterator CurrentVer() const;
-       inline DepIterator RevDependsList() const;
-       inline PrvIterator ProvidesList() const;
-       OkState State() const;
-       const char *CandVersion() const;
-       const char *CurVersion() const;
+       inline VerIterator VersionList() const APT_PURE;
+       inline VerIterator CurrentVer() const APT_PURE;
+       inline DepIterator RevDependsList() const APT_PURE;
+       inline PrvIterator ProvidesList() const APT_PURE;
+       OkState State() const APT_PURE;
+       const char *CandVersion() const APT_PURE;
+       const char *CurVersion() const APT_PURE;
 
        //Nice printable representation
        friend std::ostream& operator <<(std::ostream& out, PkgIterator i);
 
        //Nice printable representation
        friend std::ostream& operator <<(std::ostream& out, PkgIterator i);
@@ -206,6 +215,12 @@ class pkgCache::VerIterator : public Iterator<Version, VerIterator> {
        // Accessors
        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;}
        // Accessors
        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;}
+       /** \brief source package name this version comes from
+          Always contains the name, even if it is the same as the binary name */
+       inline const char *SourcePkgName() const {return Owner->StrP + S->SourcePkgName;}
+       /** \brief source version this version comes from
+          Always contains the version string, even if it is the same as the binary version */
+       inline const char *SourceVerStr() const {return Owner->StrP + S->SourceVerStr;}
        inline const char *Arch() const {
                if ((S->MultiArch & pkgCache::Version::All) == pkgCache::Version::All)
                        return "all";
        inline const char *Arch() const {
                if ((S->MultiArch & pkgCache::Version::All) == pkgCache::Version::All)
                        return "all";
@@ -220,7 +235,7 @@ class pkgCache::VerIterator : public Iterator<Version, VerIterator> {
        inline VerFileIterator FileList() const;
        bool Downloadable() const;
        inline const char *PriorityType() const {return Owner->Priority(S->Priority);}
        inline VerFileIterator FileList() const;
        bool Downloadable() const;
        inline const char *PriorityType() const {return Owner->Priority(S->Priority);}
-       const char *MultiArchType() const;
+       const char *MultiArchType() const APT_PURE;
        std::string RelStr() const;
 
        bool Automatic() const;
        std::string RelStr() const;
 
        bool Automatic() const;
@@ -282,13 +297,13 @@ class pkgCache::DepIterator : public Iterator<Dependency, DepIterator> {
        inline VerIterator ParentVer() const {return VerIterator(*Owner,Owner->VerP + S->ParentVer);}
        inline PkgIterator ParentPkg() const {return PkgIterator(*Owner,Owner->PkgP + Owner->VerP[S->ParentVer].ParentPkg);}
        inline bool Reverse() const {return Type == DepRev;}
        inline VerIterator ParentVer() const {return VerIterator(*Owner,Owner->VerP + S->ParentVer);}
        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;
-       bool IsIgnorable(PrvIterator const &Prv) const;
-       bool IsIgnorable(PkgIterator const &Pkg) const;
-       bool IsMultiArchImplicit() const;
-       bool IsSatisfied(VerIterator const &Ver) const;
-       bool IsSatisfied(PrvIterator const &Prv) const;
+       bool IsCritical() const APT_PURE;
+       bool IsNegative() const APT_PURE;
+       bool IsIgnorable(PrvIterator const &Prv) const APT_PURE;
+       bool IsIgnorable(PkgIterator const &Pkg) const APT_PURE;
+       bool IsMultiArchImplicit() const APT_PURE;
+       bool IsSatisfied(VerIterator const &Ver) const APT_PURE;
+       bool IsSatisfied(PrvIterator const &Prv) const APT_PURE;
        void GlobOr(DepIterator &Start,DepIterator &End);
        Version **AllTargets() const;
        bool SmartTargetPkg(PkgIterator &Result) const;
        void GlobOr(DepIterator &Start,DepIterator &End);
        Version **AllTargets() const;
        bool SmartTargetPkg(PkgIterator &Result) const;
@@ -327,13 +342,13 @@ class pkgCache::PrvIterator : public Iterator<Provides, PrvIterator> {
        inline void operator ++() {operator ++(0);}
 
        // Accessors
        inline void operator ++() {operator ++(0);}
 
        // Accessors
-       inline const char *Name() const {return Owner->StrP + Owner->PkgP[S->ParentPkg].Name;}
+       inline const char *Name() const {return ParentPkg().Name();}
        inline const char *ProvideVersion() const {return S->ProvideVersion == 0?0:Owner->StrP + S->ProvideVersion;}
        inline PkgIterator ParentPkg() const {return PkgIterator(*Owner,Owner->PkgP + S->ParentPkg);}
        inline VerIterator OwnerVer() const {return VerIterator(*Owner,Owner->VerP + S->Version);}
        inline PkgIterator OwnerPkg() const {return PkgIterator(*Owner,Owner->PkgP + Owner->VerP[S->Version].ParentPkg);}
 
        inline const char *ProvideVersion() const {return S->ProvideVersion == 0?0:Owner->StrP + S->ProvideVersion;}
        inline PkgIterator ParentPkg() const {return PkgIterator(*Owner,Owner->PkgP + S->ParentPkg);}
        inline VerIterator OwnerVer() const {return VerIterator(*Owner,Owner->VerP + S->Version);}
        inline PkgIterator OwnerPkg() const {return PkgIterator(*Owner,Owner->PkgP + Owner->VerP[S->Version].ParentPkg);}
 
-       bool IsMultiArchImplicit() const;
+       bool IsMultiArchImplicit() const APT_PURE;
 
        inline PrvIterator() : Iterator<Provides, PrvIterator>(), Type(PrvVer) {}
        inline PrvIterator(pkgCache &Owner, Provides *Trg, Version*) :
 
        inline PrvIterator() : Iterator<Provides, PrvIterator>(), Type(PrvVer) {}
        inline PrvIterator(pkgCache &Owner, Provides *Trg, Version*) :