]> git.saurik.com Git - apt.git/blame - apt-pkg/cacheiterators.h
rename AuthDone() -> CheckAuthDone()
[apt.git] / apt-pkg / cacheiterators.h
CommitLineData
578bfd0a
AL
1// -*- mode: cpp; mode: fold -*-
2// Description /*{{{*/
578bfd0a
AL
3/* ######################################################################
4
5 Cache Iterators - Iterators for navigating the cache structure
6
7 The iterators all provides ++,==,!=,->,* and end for their type.
8 The end function can be used to tell if the list has been fully
9 traversed.
10
11 Unlike STL iterators these contain helper functions to access the data
12 that is being iterated over. This is because the data structures can't
13 be formed in a manner that is intuitive to use and also mmapable.
14
15 For each variable in the target structure that would need a translation
16 to be accessed correctly a translating function of the same name is
17 present in the iterator. If applicable the translating function will
18 return an iterator.
19
20 The DepIterator can iterate over two lists, a list of 'version depends'
21 or a list of 'package reverse depends'. The type is determined by the
22 structure passed to the constructor, which should be the structure
6c139d6e
AL
23 that has the depends pointer as a member. The provide iterator has the
24 same system.
578bfd0a 25
094a497d 26 This header is not user includable, please use apt-pkg/pkgcache.h
578bfd0a
AL
27
28 ##################################################################### */
29 /*}}}*/
578bfd0a
AL
30#ifndef PKGLIB_CACHEITERATORS_H
31#define PKGLIB_CACHEITERATORS_H
453b82a3 32#include<apt-pkg/pkgcache.h>
a02db58f 33#include<apt-pkg/macros.h>
453b82a3 34
b3fdb998 35#include<iterator>
453b82a3
DK
36#include <iosfwd>
37#include <string>
8ceeb9d6
DK
38
39#include<string.h>
472ff00e 40
773e2c1f
DK
41// abstract Iterator template /*{{{*/
42/* This template provides the very basic iterator methods we
5bf15716 43 need to have for doing some walk-over-the-cache magic */
b3fdb998
DK
44template<typename Str, typename Itr> class pkgCache::Iterator :
45 public std::iterator<std::forward_iterator_tag, Str> {
773e2c1f
DK
46 protected:
47 Str *S;
48 pkgCache *Owner;
49
50 /** \brief Returns the Pointer for this struct in the owner
51 * The implementation of this method should be pretty short
52 * as it will only return the Pointer into the mmap stored
53 * in the owner but the name of this pointer is different for
1e3f4083 54 * each structure and we want to abstract here at least for the
773e2c1f
DK
55 * basic methods from the actual structure.
56 * \return Pointer to the first structure of this type
57 */
58 virtual Str* OwnerPointer() const = 0;
59
60 public:
61 // Iteration
62 virtual void operator ++(int) = 0;
d3e8fbb3
DK
63 virtual void operator ++() = 0; // Should be {operator ++(0);}
64 inline bool end() const {return Owner == 0 || S == OwnerPointer();}
773e2c1f
DK
65
66 // Comparison
d3e8fbb3
DK
67 inline bool operator ==(const Itr &B) const {return S == B.S;}
68 inline bool operator !=(const Itr &B) const {return S != B.S;}
773e2c1f
DK
69
70 // Accessors
d3e8fbb3
DK
71 inline Str *operator ->() {return S;}
72 inline Str const *operator ->() const {return S;}
73 inline operator Str *() {return S == OwnerPointer() ? 0 : S;}
74 inline operator Str const *() const {return S == OwnerPointer() ? 0 : S;}
75 inline Str &operator *() {return *S;}
76 inline Str const &operator *() const {return *S;}
77 inline pkgCache *Cache() const {return Owner;}
773e2c1f
DK
78
79 // Mixed stuff
d3e8fbb3
DK
80 inline void operator =(const Itr &B) {S = B.S; Owner = B.Owner;}
81 inline bool IsGood() const { return S && Owner && ! end();}
82 inline unsigned long Index() const {return S - OwnerPointer();}
773e2c1f 83
f7a35f2e
DK
84 void ReMap(void const * const oldMap, void const * const newMap) {
85 if (Owner == 0 || S == 0)
a9fe5928 86 return;
cf4ff3b7 87 S += (Str const * const)(newMap) - (Str const * const)(oldMap);
a9fe5928
DK
88 }
89
773e2c1f 90 // Constructors - look out for the variable assigning
d3e8fbb3
DK
91 inline Iterator() : S(0), Owner(0) {}
92 inline Iterator(pkgCache &Owner,Str *T = 0) : S(T), Owner(&Owner) {}
5bf15716
DK
93};
94 /*}}}*/
95// Group Iterator /*{{{*/
96/* Packages with the same name are collected in a Group so someone only
97 interest in package names can iterate easily over the names, so the
98 different architectures can be treated as of the "same" package
99 (apt internally treat them as totally different packages) */
100class pkgCache::GrpIterator: public Iterator<Group, GrpIterator> {
25396fb0
DK
101 long HashIndex;
102
5bf15716
DK
103 protected:
104 inline Group* OwnerPointer() const {
c55b8a54 105 return (Owner != 0) ? Owner->GrpP : 0;
d3e8fbb3 106 }
5bf15716
DK
107
108 public:
25396fb0
DK
109 // This constructor is the 'begin' constructor, never use it.
110 inline GrpIterator(pkgCache &Owner) : Iterator<Group, GrpIterator>(Owner), HashIndex(-1) {
111 S = OwnerPointer();
112 operator ++(0);
d3e8fbb3 113 }
25396fb0
DK
114
115 virtual void operator ++(int);
d3e8fbb3 116 virtual void operator ++() {operator ++(0);}
5bf15716 117
d3e8fbb3 118 inline const char *Name() const {return S->Name == 0?0:Owner->StrP + S->Name;}
5bf15716 119 inline PkgIterator PackageList() const;
8f3ba4e8 120 PkgIterator FindPkg(std::string Arch = "any") const;
bd2fb30a
DK
121 /** \brief find the package with the "best" architecture
122
123 The best architecture is either the "native" or the first
3db58cf4
DK
124 in the list of Architectures which is not an end-Pointer
125
126 \param PreferNonVirtual tries to respond with a non-virtual package
127 and only if this fails returns the best virtual package */
128 PkgIterator FindPreferredPkg(bool const &PreferNonVirtual = true) const;
e841200b 129 PkgIterator NextPkg(PkgIterator const &Pkg) const;
5bf15716
DK
130
131 // Constructors
25396fb0 132 inline GrpIterator(pkgCache &Owner, Group *Trg) : Iterator<Group, GrpIterator>(Owner, Trg), HashIndex(0) {
5bf15716
DK
133 if (S == 0)
134 S = OwnerPointer();
d3e8fbb3
DK
135 }
136 inline GrpIterator() : Iterator<Group, GrpIterator>(), HashIndex(0) {}
5bf15716 137
773e2c1f
DK
138};
139 /*}}}*/
92fcbfc1 140// Package Iterator /*{{{*/
773e2c1f
DK
141class pkgCache::PkgIterator: public Iterator<Package, PkgIterator> {
142 long HashIndex;
143
144 protected:
145 inline Package* OwnerPointer() const {
c55b8a54 146 return (Owner != 0) ? Owner->PkgP : 0;
d3e8fbb3 147 }
773e2c1f
DK
148
149 public:
150 // This constructor is the 'begin' constructor, never use it.
151 inline PkgIterator(pkgCache &Owner) : Iterator<Package, PkgIterator>(Owner), HashIndex(-1) {
152 S = OwnerPointer();
153 operator ++(0);
d3e8fbb3 154 }
773e2c1f
DK
155
156 virtual void operator ++(int);
d3e8fbb3 157 virtual void operator ++() {operator ++(0);}
773e2c1f
DK
158
159 enum OkState {NeedsNothing,NeedsUnpack,NeedsConfigure};
160
161 // Accessors
fe86debb 162 inline const char *Name() const { return Group().Name(); }
7a669774
DK
163 // Versions have sections - and packages can have different versions with different sections
164 // so this interface is broken by design. It used to return the section of the "first parsed
165 // package stanza", but as this can potentially be anything it now returns the section of the
166 // newest version instead (if any). aka: Run as fast as you can to Version.Section().
167 APT_DEPRECATED const char *Section() const;
773e2c1f 168 inline bool Purge() const {return S->CurrentState == pkgCache::State::Purge ||
d3e8fbb3
DK
169 (S->CurrentVer == 0 && S->CurrentState == pkgCache::State::NotInstalled);}
170 inline const char *Arch() const {return S->Arch == 0?0:Owner->StrP + S->Arch;}
a02db58f 171 inline APT_PURE GrpIterator Group() const { return GrpIterator(*Owner, Owner->GrpP + S->Group);}
773e2c1f 172
a02db58f
DK
173 inline VerIterator VersionList() const APT_PURE;
174 inline VerIterator CurrentVer() const APT_PURE;
175 inline DepIterator RevDependsList() const APT_PURE;
176 inline PrvIterator ProvidesList() const APT_PURE;
177 OkState State() const APT_PURE;
178 const char *CandVersion() const APT_PURE;
179 const char *CurVersion() const APT_PURE;
773e2c1f
DK
180
181 //Nice printable representation
182 friend std::ostream& operator <<(std::ostream& out, PkgIterator i);
75ce2062 183 std::string FullName(bool const &Pretty = false) const;
773e2c1f
DK
184
185 // Constructors
186 inline PkgIterator(pkgCache &Owner,Package *Trg) : Iterator<Package, PkgIterator>(Owner, Trg), HashIndex(0) {
187 if (S == 0)
188 S = OwnerPointer();
d3e8fbb3
DK
189 }
190 inline PkgIterator() : Iterator<Package, PkgIterator>(), HashIndex(0) {}
578bfd0a 191};
92fcbfc1
DK
192 /*}}}*/
193// Version Iterator /*{{{*/
773e2c1f
DK
194class pkgCache::VerIterator : public Iterator<Version, VerIterator> {
195 protected:
196 inline Version* OwnerPointer() const {
c55b8a54 197 return (Owner != 0) ? Owner->VerP : 0;
d3e8fbb3 198 }
773e2c1f
DK
199
200 public:
201 // Iteration
d3e8fbb3
DK
202 void operator ++(int) {if (S != Owner->VerP) S = Owner->VerP + S->NextVer;}
203 inline void operator ++() {operator ++(0);}
773e2c1f
DK
204
205 // Comparison
206 int CompareVer(const VerIterator &B) const;
8ceeb9d6
DK
207 /** \brief compares two version and returns if they are similar
208
209 This method should be used to identify if two pseudo versions are
1e3f4083 210 referring to the same "real" version */
8ceeb9d6
DK
211 inline bool SimilarVer(const VerIterator &B) const {
212 return (B.end() == false && S->Hash == B->Hash && strcmp(VerStr(), B.VerStr()) == 0);
d3e8fbb3 213 }
773e2c1f
DK
214
215 // Accessors
d3e8fbb3
DK
216 inline const char *VerStr() const {return S->VerStr == 0?0:Owner->StrP + S->VerStr;}
217 inline const char *Section() const {return S->Section == 0?0:Owner->StrP + S->Section;}
a221efc3
DK
218 /** \brief source package name this version comes from
219 Always contains the name, even if it is the same as the binary name */
220 inline const char *SourcePkgName() const {return Owner->StrP + S->SourcePkgName;}
221 /** \brief source version this version comes from
222 Always contains the version string, even if it is the same as the binary version */
223 inline const char *SourceVerStr() const {return Owner->StrP + S->SourceVerStr;}
c5dac10c 224 inline const char *Arch() const {
2a2a7ef4 225 if ((S->MultiArch & pkgCache::Version::All) == pkgCache::Version::All)
ca238ede 226 return "all";
c5dac10c 227 return S->ParentPkg == 0?0:Owner->StrP + ParentPkg()->Arch;
d3e8fbb3
DK
228 }
229 inline PkgIterator ParentPkg() const {return PkgIterator(*Owner,Owner->PkgP + S->ParentPkg);}
773e2c1f
DK
230
231 inline DescIterator DescriptionList() const;
232 DescIterator TranslatedDescription() const;
233 inline DepIterator DependsList() const;
234 inline PrvIterator ProvidesList() const;
235 inline VerFileIterator FileList() const;
236 bool Downloadable() const;
d3e8fbb3 237 inline const char *PriorityType() const {return Owner->Priority(S->Priority);}
a02db58f 238 const char *MultiArchType() const APT_PURE;
8f3ba4e8 239 std::string RelStr() const;
773e2c1f
DK
240
241 bool Automatic() const;
242 VerFileIterator NewestFile() const;
243
244 inline VerIterator(pkgCache &Owner,Version *Trg = 0) : Iterator<Version, VerIterator>(Owner, Trg) {
245 if (S == 0)
246 S = OwnerPointer();
d3e8fbb3
DK
247 }
248 inline VerIterator() : Iterator<Version, VerIterator>() {}
578bfd0a 249};
92fcbfc1
DK
250 /*}}}*/
251// Description Iterator /*{{{*/
773e2c1f
DK
252class pkgCache::DescIterator : public Iterator<Description, DescIterator> {
253 protected:
254 inline Description* OwnerPointer() const {
c55b8a54 255 return (Owner != 0) ? Owner->DescP : 0;
d3e8fbb3 256 }
773e2c1f
DK
257
258 public:
259 // Iteration
d3e8fbb3
DK
260 void operator ++(int) {if (S != Owner->DescP) S = Owner->DescP + S->NextDesc;}
261 inline void operator ++() {operator ++(0);}
773e2c1f
DK
262
263 // Comparison
264 int CompareDesc(const DescIterator &B) const;
265
266 // Accessors
d3e8fbb3
DK
267 inline const char *LanguageCode() const {return Owner->StrP + S->language_code;}
268 inline const char *md5() const {return Owner->StrP + S->md5sum;}
773e2c1f
DK
269 inline DescFileIterator FileList() const;
270
d3e8fbb3 271 inline DescIterator() : Iterator<Description, DescIterator>() {}
773e2c1f
DK
272 inline DescIterator(pkgCache &Owner,Description *Trg = 0) : Iterator<Description, DescIterator>(Owner, Trg) {
273 if (S == 0)
274 S = Owner.DescP;
d3e8fbb3 275 }
a52f938b 276};
92fcbfc1
DK
277 /*}}}*/
278// Dependency iterator /*{{{*/
773e2c1f
DK
279class pkgCache::DepIterator : public Iterator<Dependency, DepIterator> {
280 enum {DepVer, DepRev} Type;
281
282 protected:
283 inline Dependency* OwnerPointer() const {
c55b8a54 284 return (Owner != 0) ? Owner->DepP : 0;
d3e8fbb3 285 }
773e2c1f
DK
286
287 public:
288 // Iteration
289 void operator ++(int) {if (S != Owner->DepP) S = Owner->DepP +
d3e8fbb3
DK
290 (Type == DepVer ? S->NextDepends : S->NextRevDepends);}
291 inline void operator ++() {operator ++(0);}
773e2c1f
DK
292
293 // Accessors
d3e8fbb3
DK
294 inline const char *TargetVer() const {return S->Version == 0?0:Owner->StrP + S->Version;}
295 inline PkgIterator TargetPkg() const {return PkgIterator(*Owner,Owner->PkgP + S->Package);}
296 inline PkgIterator SmartTargetPkg() const {PkgIterator R(*Owner,0);SmartTargetPkg(R);return R;}
297 inline VerIterator ParentVer() const {return VerIterator(*Owner,Owner->VerP + S->ParentVer);}
298 inline PkgIterator ParentPkg() const {return PkgIterator(*Owner,Owner->PkgP + Owner->VerP[S->ParentVer].ParentPkg);}
299 inline bool Reverse() const {return Type == DepRev;}
a02db58f
DK
300 bool IsCritical() const APT_PURE;
301 bool IsNegative() const APT_PURE;
302 bool IsIgnorable(PrvIterator const &Prv) const APT_PURE;
303 bool IsIgnorable(PkgIterator const &Pkg) const APT_PURE;
304 bool IsMultiArchImplicit() const APT_PURE;
305 bool IsSatisfied(VerIterator const &Ver) const APT_PURE;
306 bool IsSatisfied(PrvIterator const &Prv) const APT_PURE;
773e2c1f 307 void GlobOr(DepIterator &Start,DepIterator &End);
e841200b
DK
308 Version **AllTargets() const;
309 bool SmartTargetPkg(PkgIterator &Result) const;
d3e8fbb3
DK
310 inline const char *CompType() const {return Owner->CompType(S->CompareOp);}
311 inline const char *DepType() const {return Owner->DepType(S->Type);}
773e2c1f 312
47f6d1b7
DK
313 //Nice printable representation
314 friend std::ostream& operator <<(std::ostream& out, DepIterator D);
315
773e2c1f
DK
316 inline DepIterator(pkgCache &Owner, Dependency *Trg, Version* = 0) :
317 Iterator<Dependency, DepIterator>(Owner, Trg), Type(DepVer) {
318 if (S == 0)
319 S = Owner.DepP;
d3e8fbb3 320 }
773e2c1f
DK
321 inline DepIterator(pkgCache &Owner, Dependency *Trg, Package*) :
322 Iterator<Dependency, DepIterator>(Owner, Trg), Type(DepRev) {
323 if (S == 0)
324 S = Owner.DepP;
d3e8fbb3
DK
325 }
326 inline DepIterator() : Iterator<Dependency, DepIterator>(), Type(DepVer) {}
578bfd0a 327};
92fcbfc1
DK
328 /*}}}*/
329// Provides iterator /*{{{*/
773e2c1f
DK
330class pkgCache::PrvIterator : public Iterator<Provides, PrvIterator> {
331 enum {PrvVer, PrvPkg} Type;
332
333 protected:
334 inline Provides* OwnerPointer() const {
c55b8a54 335 return (Owner != 0) ? Owner->ProvideP : 0;
d3e8fbb3 336 }
773e2c1f
DK
337
338 public:
339 // Iteration
340 void operator ++(int) {if (S != Owner->ProvideP) S = Owner->ProvideP +
d3e8fbb3
DK
341 (Type == PrvVer?S->NextPkgProv:S->NextProvides);}
342 inline void operator ++() {operator ++(0);}
773e2c1f
DK
343
344 // Accessors
fe86debb 345 inline const char *Name() const {return ParentPkg().Name();}
d3e8fbb3
DK
346 inline const char *ProvideVersion() const {return S->ProvideVersion == 0?0:Owner->StrP + S->ProvideVersion;}
347 inline PkgIterator ParentPkg() const {return PkgIterator(*Owner,Owner->PkgP + S->ParentPkg);}
348 inline VerIterator OwnerVer() const {return VerIterator(*Owner,Owner->VerP + S->Version);}
349 inline PkgIterator OwnerPkg() const {return PkgIterator(*Owner,Owner->PkgP + Owner->VerP[S->Version].ParentPkg);}
773e2c1f 350
a02db58f 351 bool IsMultiArchImplicit() const APT_PURE;
773e2c1f 352
d3e8fbb3 353 inline PrvIterator() : Iterator<Provides, PrvIterator>(), Type(PrvVer) {}
773e2c1f
DK
354 inline PrvIterator(pkgCache &Owner, Provides *Trg, Version*) :
355 Iterator<Provides, PrvIterator>(Owner, Trg), Type(PrvVer) {
356 if (S == 0)
357 S = Owner.ProvideP;
d3e8fbb3 358 }
773e2c1f
DK
359 inline PrvIterator(pkgCache &Owner, Provides *Trg, Package*) :
360 Iterator<Provides, PrvIterator>(Owner, Trg), Type(PrvPkg) {
361 if (S == 0)
362 S = Owner.ProvideP;
d3e8fbb3 363 }
578bfd0a 364};
92fcbfc1
DK
365 /*}}}*/
366// Package file /*{{{*/
773e2c1f
DK
367class pkgCache::PkgFileIterator : public Iterator<PackageFile, PkgFileIterator> {
368 protected:
369 inline PackageFile* OwnerPointer() const {
c55b8a54 370 return (Owner != 0) ? Owner->PkgFileP : 0;
d3e8fbb3 371 }
773e2c1f
DK
372
373 public:
374 // Iteration
d3e8fbb3
DK
375 void operator ++(int) {if (S != Owner->PkgFileP) S = Owner->PkgFileP + S->NextFile;}
376 inline void operator ++() {operator ++(0);}
773e2c1f
DK
377
378 // Accessors
d3e8fbb3
DK
379 inline const char *FileName() const {return S->FileName == 0?0:Owner->StrP + S->FileName;}
380 inline const char *Archive() const {return S->Archive == 0?0:Owner->StrP + S->Archive;}
381 inline const char *Component() const {return S->Component == 0?0:Owner->StrP + S->Component;}
382 inline const char *Version() const {return S->Version == 0?0:Owner->StrP + S->Version;}
383 inline const char *Origin() const {return S->Origin == 0?0:Owner->StrP + S->Origin;}
384 inline const char *Codename() const {return S->Codename ==0?0:Owner->StrP + S->Codename;}
385 inline const char *Label() const {return S->Label == 0?0:Owner->StrP + S->Label;}
386 inline const char *Site() const {return S->Site == 0?0:Owner->StrP + S->Site;}
387 inline const char *Architecture() const {return S->Architecture == 0?0:Owner->StrP + S->Architecture;}
388 inline const char *IndexType() const {return S->IndexType == 0?0:Owner->StrP + S->IndexType;}
773e2c1f
DK
389
390 bool IsOk();
8f3ba4e8 391 std::string RelStr();
773e2c1f
DK
392
393 // Constructors
d3e8fbb3
DK
394 inline PkgFileIterator() : Iterator<PackageFile, PkgFileIterator>() {}
395 inline PkgFileIterator(pkgCache &Owner) : Iterator<PackageFile, PkgFileIterator>(Owner, Owner.PkgFileP) {}
396 inline PkgFileIterator(pkgCache &Owner,PackageFile *Trg) : Iterator<PackageFile, PkgFileIterator>(Owner, Trg) {}
578bfd0a 397};
92fcbfc1
DK
398 /*}}}*/
399// Version File /*{{{*/
773e2c1f
DK
400class pkgCache::VerFileIterator : public pkgCache::Iterator<VerFile, VerFileIterator> {
401 protected:
402 inline VerFile* OwnerPointer() const {
c55b8a54 403 return (Owner != 0) ? Owner->VerFileP : 0;
d3e8fbb3 404 }
773e2c1f
DK
405
406 public:
407 // Iteration
d3e8fbb3
DK
408 void operator ++(int) {if (S != Owner->VerFileP) S = Owner->VerFileP + S->NextFile;}
409 inline void operator ++() {operator ++(0);}
773e2c1f
DK
410
411 // Accessors
d3e8fbb3 412 inline PkgFileIterator File() const {return PkgFileIterator(*Owner,S->File + Owner->PkgFileP);}
773e2c1f 413
d3e8fbb3
DK
414 inline VerFileIterator() : Iterator<VerFile, VerFileIterator>() {}
415 inline VerFileIterator(pkgCache &Owner,VerFile *Trg) : Iterator<VerFile, VerFileIterator>(Owner, Trg) {}
dcb79bae 416};
92fcbfc1
DK
417 /*}}}*/
418// Description File /*{{{*/
773e2c1f
DK
419class pkgCache::DescFileIterator : public Iterator<DescFile, DescFileIterator> {
420 protected:
421 inline DescFile* OwnerPointer() const {
c55b8a54 422 return (Owner != 0) ? Owner->DescFileP : 0;
d3e8fbb3 423 }
773e2c1f
DK
424
425 public:
426 // Iteration
d3e8fbb3
DK
427 void operator ++(int) {if (S != Owner->DescFileP) S = Owner->DescFileP + S->NextFile;}
428 inline void operator ++() {operator ++(0);}
773e2c1f
DK
429
430 // Accessors
d3e8fbb3 431 inline PkgFileIterator File() const {return PkgFileIterator(*Owner,S->File + Owner->PkgFileP);}
773e2c1f 432
d3e8fbb3
DK
433 inline DescFileIterator() : Iterator<DescFile, DescFileIterator>() {}
434 inline DescFileIterator(pkgCache &Owner,DescFile *Trg) : Iterator<DescFile, DescFileIterator>(Owner, Trg) {}
a52f938b 435};
92fcbfc1 436 /*}}}*/
1e3f4083 437// Inlined Begin functions can't be in the class because of order problems /*{{{*/
5bf15716 438inline pkgCache::PkgIterator pkgCache::GrpIterator::PackageList() const
d3e8fbb3 439 {return PkgIterator(*Owner,Owner->PkgP + S->FirstPackage);}
578bfd0a 440inline pkgCache::VerIterator pkgCache::PkgIterator::VersionList() const
d3e8fbb3 441 {return VerIterator(*Owner,Owner->VerP + S->VersionList);}
578bfd0a 442inline pkgCache::VerIterator pkgCache::PkgIterator::CurrentVer() const
d3e8fbb3 443 {return VerIterator(*Owner,Owner->VerP + S->CurrentVer);}
578bfd0a 444inline pkgCache::DepIterator pkgCache::PkgIterator::RevDependsList() const
d3e8fbb3 445 {return DepIterator(*Owner,Owner->DepP + S->RevDepends,S);}
578bfd0a 446inline pkgCache::PrvIterator pkgCache::PkgIterator::ProvidesList() const
d3e8fbb3 447 {return PrvIterator(*Owner,Owner->ProvideP + S->ProvidesList,S);}
a52f938b 448inline pkgCache::DescIterator pkgCache::VerIterator::DescriptionList() const
d3e8fbb3 449 {return DescIterator(*Owner,Owner->DescP + S->DescriptionList);}
578bfd0a 450inline pkgCache::PrvIterator pkgCache::VerIterator::ProvidesList() const
d3e8fbb3 451 {return PrvIterator(*Owner,Owner->ProvideP + S->ProvidesList,S);}
578bfd0a 452inline pkgCache::DepIterator pkgCache::VerIterator::DependsList() const
d3e8fbb3 453 {return DepIterator(*Owner,Owner->DepP + S->DependsList,S);}
dcb79bae 454inline pkgCache::VerFileIterator pkgCache::VerIterator::FileList() const
d3e8fbb3 455 {return VerFileIterator(*Owner,Owner->VerFileP + S->FileList);}
a52f938b 456inline pkgCache::DescFileIterator pkgCache::DescIterator::FileList() const
d3e8fbb3 457 {return DescFileIterator(*Owner,Owner->DescFileP + S->FileList);}
92fcbfc1 458 /*}}}*/
578bfd0a 459#endif