]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/cacheiterators.h
Don't download "optional" files not in Release :/.
[apt.git] / apt-pkg / cacheiterators.h
index 45d23151c441af69ff2560d736c25ddfdabb00d7..e594f3e7df5331d10397d2b3de406db1697d671f 100644 (file)
@@ -57,7 +57,7 @@ template<typename Str, typename Itr> class pkgCache::Iterator :
        Str* OwnerPointer() const { return static_cast<Itr const*>(this)->OwnerPointer(); }
 
        protected:
-       Str *S;
+       Str *volatile S;
        pkgCache *Owner;
 
        public:
@@ -214,6 +214,7 @@ 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;}
+       inline const char *Display() const {return S->Display == 0?0:Owner->StrP + S->Display;}
        /** \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;}
@@ -249,45 +250,30 @@ class pkgCache::VerIterator : public Iterator<Version, VerIterator> {
 };
                                                                        /*}}}*/
 // Tag Iterator                                                                /*{{{*/
-class pkgCache::TagIterator
-{
-   Tag *Tg;
-   pkgCache *Owner;
-
-   void _dummy();
-
-   public:
+class pkgCache::TagIterator : public Iterator<Tag, TagIterator> {
+       public:
+       inline Tag* OwnerPointer() const {
+               return (Owner != 0) ? Owner->TagP : 0;
+       }
 
    // Iteration
-   void operator ++(int) {if (Tg != Owner->TagP) Tg = Owner->TagP + Tg->NextTag;};
+   void operator ++(int) {if (S != Owner->TagP) S = Owner->TagP + S->NextTag;};
    inline void operator ++() {operator ++(0);};
-   inline bool end() const {return Tg == Owner->TagP?true:false;};
-   inline void operator =(const TagIterator &B) {Tg = B.Tg; Owner = B.Owner;};
 
    // Comparison
-   inline bool operator ==(const TagIterator &B) const {return Tg == B.Tg;};
-   inline bool operator !=(const TagIterator &B) const {return Tg != B.Tg;};
+   inline bool operator ==(const TagIterator &B) const {return S == B.S;};
+   inline bool operator !=(const TagIterator &B) const {return S != B.S;};
    int CompareTag(const TagIterator &B) const;
 
    // Accessors
-   inline Tag *operator ->() {return Tg;};
-   inline Tag const *operator ->() const {return Tg;};
-   inline Tag &operator *() {return *Tg;};
-   inline Tag const &operator *() const {return *Tg;};
-   inline operator Tag *() {return Tg == Owner->TagP?0:Tg;};
-   inline operator Tag const *() const {return Tg == Owner->TagP?0:Tg;};
-   inline pkgCache *Cache() {return Owner;};
-
-   inline const char *Name() const {return Owner->StrP + Tg->Name;};
-   inline unsigned long Index() const {return Tg - Owner->TagP;};
-
-   inline TagIterator() : Tg(0), Owner(0) {};
-   inline TagIterator(pkgCache &Owner,Tag *Trg = 0) : Tg(Trg),
-              Owner(&Owner)
-   {
-      if (Tg == 0)
-        Tg = Owner.TagP;
-   };
+   inline const char *Name() const {return Owner->StrP + S->Name;};
+   inline unsigned long Index() const {return S - Owner->TagP;};
+
+       inline TagIterator(pkgCache &Owner,Tag *Trg = 0) : Iterator<Tag, TagIterator>(Owner, Trg) {
+               if (S == 0)
+                       S = OwnerPointer();
+       }
+       inline TagIterator() : Iterator<Tag, TagIterator>() {}
 };
                                                                        /*}}}*/
 // Description Iterator                                                        /*{{{*/