30 #ifndef PKGLIB_CACHEITERATORS_H
31 #define PKGLIB_CACHEITERATORS_H
40 public std::iterator<std::forward_iterator_tag, Str> {
57 virtual void operator ++(
int) = 0;
58 virtual void operator ++() = 0;
59 inline bool end()
const {
return Owner == 0 || S ==
OwnerPointer();};
62 inline bool operator ==(
const Itr &B)
const {
return S == B.S;};
63 inline bool operator !=(
const Itr &B)
const {
return S != B.S;};
66 inline Str *operator ->() {
return S;};
67 inline Str
const *operator ->()
const {
return S;};
68 inline operator Str *() {
return S ==
OwnerPointer() ? 0 : S;};
69 inline operator Str
const *()
const {
return S ==
OwnerPointer() ? 0 : S;};
70 inline Str &operator *() {
return *S;};
71 inline Str
const &operator *()
const {
return *S;};
72 inline pkgCache *Cache()
const {
return Owner;};
75 inline void operator =(
const Itr &B) {S = B.S; Owner = B.Owner;};
76 inline bool IsGood()
const {
return S && Owner && ! end();};
77 inline unsigned long Index()
const {
return S -
OwnerPointer();};
79 void ReMap(
void const *
const oldMap,
void const *
const newMap) {
80 if (Owner == 0 || S == 0)
82 S += (Str*)(newMap) - (Str*)(oldMap);
86 inline Iterator() : S(0), Owner(0) {};
100 return (Owner != 0) ? Owner->GrpP : 0;
110 virtual void operator ++(
int);
111 virtual void operator ++() {operator ++(0);};
113 inline const char *Name()
const {
return S->
Name == 0?0:Owner->StrP + S->
Name;};
114 inline PkgIterator PackageList()
const;
115 PkgIterator FindPkg(std::string Arch =
"any")
const;
124 PkgIterator NextPkg(PkgIterator
const &Pkg)
const;
127 inline GrpIterator(
pkgCache &Owner, Group *Trg) : Iterator<Group, GrpIterator>(Owner, Trg), HashIndex(0) {
131 inline GrpIterator() : Iterator<Group, GrpIterator>(), HashIndex(0) {};
141 return (Owner != 0) ? Owner->PkgP : 0;
151 virtual void operator ++(
int);
152 virtual void operator ++() {operator ++(0);};
154 enum OkState {NeedsNothing,NeedsUnpack,NeedsConfigure};
157 inline const char *Name()
const {
return S->
Name == 0?0:Owner->StrP + S->
Name;};
158 inline const char *Section()
const {
return S->
Section == 0?0:Owner->StrP + S->
Section;};
159 inline bool Purge()
const {
return S->
CurrentState == pkgCache::State::Purge ||
161 inline const char *Arch()
const {
return S->
Arch == 0?0:Owner->StrP + S->
Arch;};
162 inline GrpIterator Group()
const {
return GrpIterator(*Owner, Owner->GrpP + S->
Group);};
164 inline VerIterator VersionList()
const;
165 inline VerIterator CurrentVer()
const;
166 inline DepIterator RevDependsList()
const;
167 inline PrvIterator ProvidesList()
const;
168 OkState State()
const;
169 const char *CandVersion()
const;
170 const char *CurVersion()
const;
173 friend std::ostream& operator <<(std::ostream& out, PkgIterator i);
174 std::string FullName(
bool const &Pretty =
false)
const;
177 inline PkgIterator(
pkgCache &Owner,Package *Trg) : Iterator<Package, PkgIterator>(Owner, Trg), HashIndex(0) {
181 inline PkgIterator() : Iterator<Package, PkgIterator>(), HashIndex(0) {};
188 return (Owner != 0) ? Owner->VerP : 0;
193 void operator ++(
int) {
if (S != Owner->VerP) S = Owner->VerP + S->
NextVer;};
194 inline void operator ++() {operator ++(0);};
197 int CompareVer(
const VerIterator &B)
const;
203 return (B.end() ==
false && S->
Hash == B->Hash && strcmp(VerStr(), B.VerStr()) == 0);
207 inline const char *VerStr()
const {
return S->
VerStr == 0?0:Owner->StrP + S->
VerStr;};
208 inline const char *Section()
const {
return S->
Section == 0?0:Owner->StrP + S->
Section;};
209 inline const char *Arch()
const {
212 return S->
ParentPkg == 0?0:Owner->StrP + ParentPkg()->Arch;
214 inline PkgIterator ParentPkg()
const {
return PkgIterator(*Owner,Owner->PkgP + S->
ParentPkg);};
216 inline DescIterator DescriptionList()
const;
217 DescIterator TranslatedDescription()
const;
218 inline DepIterator DependsList()
const;
219 inline PrvIterator ProvidesList()
const;
220 inline VerFileIterator FileList()
const;
221 bool Downloadable()
const;
222 inline const char *PriorityType()
const {
return Owner->Priority(S->
Priority);};
223 const char *MultiArchType()
const;
224 std::string RelStr()
const;
226 bool Automatic()
const;
227 VerFileIterator NewestFile()
const;
229 inline VerIterator(
pkgCache &Owner,Version *Trg = 0) : Iterator<Version, VerIterator>(Owner, Trg) {
233 inline VerIterator() : Iterator<Version, VerIterator>() {};
240 return (Owner != 0) ? Owner->DescP : 0;
245 void operator ++(
int) {
if (S != Owner->DescP) S = Owner->DescP + S->
NextDesc;};
246 inline void operator ++() {operator ++(0);};
249 int CompareDesc(
const DescIterator &B)
const;
252 inline const char *LanguageCode()
const {
return Owner->StrP + S->
language_code;};
253 inline const char *md5()
const {
return Owner->StrP + S->
md5sum;};
254 inline DescFileIterator FileList()
const;
256 inline DescIterator() : Iterator<Description, DescIterator>() {};
257 inline DescIterator(
pkgCache &Owner,Description *Trg = 0) : Iterator<Description, DescIterator>(Owner, Trg) {
265 enum {DepVer, DepRev} Type;
269 return (Owner != 0) ? Owner->DepP : 0;
274 void operator ++(
int) {
if (S != Owner->DepP) S = Owner->DepP +
276 inline void operator ++() {operator ++(0);};
279 inline const char *TargetVer()
const {
return S->
Version == 0?0:Owner->StrP + S->
Version;};
280 inline PkgIterator TargetPkg()
const {
return PkgIterator(*Owner,Owner->PkgP + S->
Package);};
281 inline PkgIterator SmartTargetPkg()
const {PkgIterator R(*Owner,0);SmartTargetPkg(R);
return R;};
282 inline VerIterator ParentVer()
const {
return VerIterator(*Owner,Owner->VerP + S->
ParentVer);};
283 inline PkgIterator ParentPkg()
const {
return PkgIterator(*Owner,Owner->PkgP + Owner->VerP[S->
ParentVer].
ParentPkg);};
284 inline bool Reverse()
const {
return Type == DepRev;};
285 bool IsCritical()
const;
286 bool IsNegative()
const;
287 bool IsIgnorable(PrvIterator
const &Prv)
const;
288 bool IsIgnorable(PkgIterator
const &Pkg)
const;
289 bool IsMultiArchImplicit()
const;
290 bool IsSatisfied(VerIterator
const &Ver)
const;
291 bool IsSatisfied(PrvIterator
const &Prv)
const;
292 void GlobOr(DepIterator &Start,DepIterator &End);
293 Version **AllTargets()
const;
294 bool SmartTargetPkg(PkgIterator &Result)
const;
295 inline const char *CompType()
const {
return Owner->CompType(S->
CompareOp);};
296 inline const char *DepType()
const {
return Owner->DepType(S->
Type);};
299 friend std::ostream& operator <<(std::ostream& out, DepIterator D);
301 inline DepIterator(
pkgCache &Owner, Dependency *Trg, Version* = 0) :
302 Iterator<Dependency, DepIterator>(Owner, Trg), Type(DepVer) {
306 inline DepIterator(
pkgCache &Owner, Dependency *Trg, Package*) :
307 Iterator<Dependency, DepIterator>(Owner, Trg), Type(DepRev) {
311 inline DepIterator() : Iterator<Dependency, DepIterator>(), Type(DepVer) {};
316 enum {PrvVer, PrvPkg} Type;
320 return (Owner != 0) ? Owner->ProvideP : 0;
325 void operator ++(
int) {
if (S != Owner->ProvideP) S = Owner->ProvideP +
327 inline void operator ++() {operator ++(0);};
330 inline const char *Name()
const {
return Owner->StrP + Owner->PkgP[S->
ParentPkg].
Name;};
332 inline PkgIterator ParentPkg()
const {
return PkgIterator(*Owner,Owner->PkgP + S->
ParentPkg);};
333 inline VerIterator OwnerVer()
const {
return VerIterator(*Owner,Owner->VerP + S->
Version);};
334 inline PkgIterator OwnerPkg()
const {
return PkgIterator(*Owner,Owner->PkgP + Owner->VerP[S->
Version].
ParentPkg);};
336 bool IsMultiArchImplicit()
const;
338 inline PrvIterator() : Iterator<Provides, PrvIterator>(), Type(PrvVer) {};
339 inline PrvIterator(
pkgCache &Owner, Provides *Trg, Version*) :
340 Iterator<Provides, PrvIterator>(Owner, Trg), Type(PrvVer) {
344 inline PrvIterator(
pkgCache &Owner, Provides *Trg, Package*) :
345 Iterator<Provides, PrvIterator>(Owner, Trg), Type(PrvPkg) {
355 return (Owner != 0) ? Owner->PkgFileP : 0;
360 void operator ++(
int) {
if (S != Owner->PkgFileP) S = Owner->PkgFileP + S->
NextFile;};
361 inline void operator ++() {operator ++(0);};
364 inline const char *FileName()
const {
return S->
FileName == 0?0:Owner->StrP + S->
FileName;};
365 inline const char *Archive()
const {
return S->
Archive == 0?0:Owner->StrP + S->
Archive;};
366 inline const char *Component()
const {
return S->Component == 0?0:Owner->StrP + S->Component;};
367 inline const char *Version()
const {
return S->Version == 0?0:Owner->StrP + S->Version;};
368 inline const char *Origin()
const {
return S->Origin == 0?0:Owner->StrP + S->Origin;};
369 inline const char *Codename()
const {
return S->Codename ==0?0:Owner->StrP + S->Codename;};
370 inline const char *Label()
const {
return S->Label == 0?0:Owner->StrP + S->Label;};
371 inline const char *Site()
const {
return S->
Site == 0?0:Owner->StrP + S->
Site;};
372 inline const char *Architecture()
const {
return S->Architecture == 0?0:Owner->StrP + S->Architecture;};
373 inline const char *IndexType()
const {
return S->
IndexType == 0?0:Owner->StrP + S->
IndexType;};
376 std::string RelStr();
379 inline PkgFileIterator() : Iterator<PackageFile, PkgFileIterator>() {};
380 inline PkgFileIterator(
pkgCache &Owner) : Iterator<PackageFile, PkgFileIterator>(Owner, Owner.PkgFileP) {};
381 inline PkgFileIterator(
pkgCache &Owner,PackageFile *Trg) : Iterator<PackageFile, PkgFileIterator>(Owner, Trg) {};
388 return (Owner != 0) ? Owner->VerFileP : 0;
393 void operator ++(
int) {
if (S != Owner->VerFileP) S = Owner->VerFileP + S->
NextFile;};
394 inline void operator ++() {operator ++(0);};
397 inline PkgFileIterator File()
const {
return PkgFileIterator(*Owner,S->
File + Owner->PkgFileP);};
399 inline VerFileIterator() : Iterator<VerFile, VerFileIterator>() {};
400 inline VerFileIterator(
pkgCache &Owner,VerFile *Trg) : Iterator<VerFile, VerFileIterator>(Owner, Trg) {};
407 return (Owner != 0) ? Owner->DescFileP : 0;
412 void operator ++(
int) {
if (S != Owner->DescFileP) S = Owner->DescFileP + S->
NextFile;};
413 inline void operator ++() {operator ++(0);};
416 inline PkgFileIterator File()
const {
return PkgFileIterator(*Owner,S->
File + Owner->PkgFileP);};
418 inline DescFileIterator() : Iterator<DescFile, DescFileIterator>() {};
419 inline DescFileIterator(
pkgCache &Owner,DescFile *Trg) : Iterator<DescFile, DescFileIterator>(Owner, Trg) {};
424 {
return PkgIterator(*Owner,Owner->PkgP + S->
FirstPackage);};
426 {
return VerIterator(*Owner,Owner->VerP + S->VersionList);};
428 {
return VerIterator(*Owner,Owner->VerP + S->CurrentVer);};
430 {
return DepIterator(*Owner,Owner->DepP + S->RevDepends,S);};
432 {
return PrvIterator(*Owner,Owner->ProvideP + S->ProvidesList,S);};
434 {
return DescIterator(*Owner,Owner->DescP + S->DescriptionList);};
436 {
return PrvIterator(*Owner,Owner->ProvideP + S->ProvidesList,S);};
438 {
return DepIterator(*Owner,Owner->DepP + S->DependsList,S);};
440 {
return VerFileIterator(*Owner,Owner->VerFileP + S->FileList);};
442 {
return DescFileIterator(*Owner,Owner->DescFileP + S->FileList);};