-class pkgCache::DepIterator
-{
- Dependency *Dep;
- enum {DepVer, DepRev} Type;
- pkgCache *Owner;
-
- void _dummy();
-
- public:
-
- // Iteration
- void operator ++(int) {if (Dep != Owner->DepP) Dep = Owner->DepP +
- (Type == DepVer?Dep->NextDepends:Dep->NextRevDepends);};
- inline void operator ++() {operator ++(0);};
- inline bool end() const {return Owner == 0 || Dep == Owner->DepP?true:false;};
-
- // Comparison
- inline bool operator ==(const DepIterator &B) const {return Dep == B.Dep;};
- inline bool operator !=(const DepIterator &B) const {return Dep != B.Dep;};
-
- // Accessors
- inline Dependency *operator ->() {return Dep;};
- inline Dependency const *operator ->() const {return Dep;};
- inline Dependency &operator *() {return *Dep;};
- inline Dependency const &operator *() const {return *Dep;};
- inline operator Dependency *() {return Dep == Owner->DepP?0:Dep;};
- inline operator Dependency const *() const {return Dep == Owner->DepP?0:Dep;};
- inline pkgCache *Cache() {return Owner;};
-
- inline const char *TargetVer() const {return Dep->Version == 0?0:Owner->StrP + Dep->Version;};
- inline PkgIterator TargetPkg() {return PkgIterator(*Owner,Owner->PkgP + Dep->Package);};
- inline PkgIterator SmartTargetPkg() {PkgIterator R(*Owner,0);SmartTargetPkg(R);return R;};
- inline VerIterator ParentVer() {return VerIterator(*Owner,Owner->VerP + Dep->ParentVer);};
- inline PkgIterator ParentPkg() {return PkgIterator(*Owner,Owner->PkgP + Owner->VerP[Dep->ParentVer].ParentPkg);};
- inline bool Reverse() {return Type == DepRev;};
- inline unsigned long Index() const {return Dep - Owner->DepP;};
- bool IsCritical();
- void GlobOr(DepIterator &Start,DepIterator &End);
- Version **AllTargets();
- bool SmartTargetPkg(PkgIterator &Result);
- inline const char *CompType() {return Owner->CompType(Dep->CompareOp);};
- inline const char *DepType() {return Owner->DepType(Dep->Type);};
-
- inline DepIterator(pkgCache &Owner,Dependency *Trg,Version * = 0) :
- Dep(Trg), Type(DepVer), Owner(&Owner)
- {
- if (Dep == 0)
- Dep = Owner.DepP;
- };
- inline DepIterator(pkgCache &Owner,Dependency *Trg,Package *) :
- Dep(Trg), Type(DepRev), Owner(&Owner)
- {
- if (Dep == 0)
- Dep = Owner.DepP;
- };
- inline DepIterator() : Dep(0), Type(DepVer), Owner(0) {};
+class pkgCache::DepIterator : public Iterator<Dependency, DepIterator> {
+ enum {DepVer, DepRev} Type;
+
+ protected:
+ inline Dependency* OwnerPointer() const {
+ return Owner->DepP;
+ };
+
+ public:
+ // Iteration
+ void operator ++(int) {if (S != Owner->DepP) S = Owner->DepP +
+ (Type == DepVer ? S->NextDepends : S->NextRevDepends);};
+ inline void operator ++() {operator ++(0);};
+
+ // Accessors
+ inline const char *TargetVer() const {return S->Version == 0?0:Owner->StrP + S->Version;};
+ inline PkgIterator TargetPkg() {return PkgIterator(*Owner,Owner->PkgP + S->Package);};
+ inline PkgIterator SmartTargetPkg() {PkgIterator R(*Owner,0);SmartTargetPkg(R);return R;};
+ inline VerIterator ParentVer() {return VerIterator(*Owner,Owner->VerP + S->ParentVer);};
+ inline PkgIterator ParentPkg() {return PkgIterator(*Owner,Owner->PkgP + Owner->VerP[S->ParentVer].ParentPkg);};
+ inline bool Reverse() {return Type == DepRev;};
+ bool IsCritical();
+ void GlobOr(DepIterator &Start,DepIterator &End);
+ Version **AllTargets();
+ bool SmartTargetPkg(PkgIterator &Result);
+ inline const char *CompType() {return Owner->CompType(S->CompareOp);};
+ inline const char *DepType() {return Owner->DepType(S->Type);};
+
+ inline DepIterator(pkgCache &Owner, Dependency *Trg, Version* = 0) :
+ Iterator<Dependency, DepIterator>(Owner, Trg), Type(DepVer) {
+ if (S == 0)
+ S = Owner.DepP;
+ };
+ inline DepIterator(pkgCache &Owner, Dependency *Trg, Package*) :
+ Iterator<Dependency, DepIterator>(Owner, Trg), Type(DepRev) {
+ if (S == 0)
+ S = Owner.DepP;
+ };
+ inline DepIterator() : Iterator<Dependency, DepIterator>(), Type(DepVer) {};