]>
git.saurik.com Git - apt.git/blob - apt-pkg/orderlist.h
1 // -*- mode: cpp; mode: fold -*-
3 // $Id: orderlist.h,v 1.8 2000/01/16 08:45:47 jgg Exp $
4 /* ######################################################################
6 Order List - Represents and Manipulates an ordered list of packages.
8 A list of packages can be ordered by a number of conflicting criteria
9 each given a specific priority. Each package also has a set of flags
10 indicating some usefull things about it that are derived in the
11 course of sorting. The pkgPackageManager class uses this class for
12 all of it's installation ordering needs.
14 ##################################################################### */
16 // Header section: pkglib
17 #ifndef PKGLIB_ORDERLIST_H
18 #define PKGLIB_ORDERLIST_H
21 #pragma interface "apt-pkg/orderlist.h"
24 #include <apt-pkg/pkgcache.h>
33 // Bring some usefull types into the local scope
34 typedef pkgCache::PkgIterator PkgIterator
;
35 typedef pkgCache::VerIterator VerIterator
;
36 typedef pkgCache::DepIterator DepIterator
;
37 typedef pkgCache::PrvIterator PrvIterator
;
38 typedef pkgCache::Package Package
;
39 typedef pkgCache::Version Version
;
40 typedef bool (pkgOrderList::*DepFunc
)(DepIterator D
);
42 // These are the currently selected ordering functions
54 DepIterator Loops
[20];
57 unsigned short *Flags
;
59 // Main visit function
60 bool VisitNode(PkgIterator Pkg
);
61 bool VisitDeps(DepFunc F
,PkgIterator Pkg
);
62 bool VisitRDeps(DepFunc F
,PkgIterator Pkg
);
63 bool VisitRProvides(DepFunc F
,VerIterator Ver
);
64 bool VisitProvides(DepIterator Pkg
,bool Critical
);
66 // Dependency checking functions.
67 bool DepUnPackCrit(DepIterator D
);
68 bool DepUnPackPreD(DepIterator D
);
69 bool DepUnPackPre(DepIterator D
);
70 bool DepUnPackDep(DepIterator D
);
71 bool DepConfigure(DepIterator D
);
72 bool DepRemove(DepIterator D
);
75 bool AddLoop(DepIterator D
);
76 bool CheckDep(DepIterator D
);
80 static pkgOrderList
*Me
;
81 static int OrderCompareA(const void *a
, const void *b
);
82 static int OrderCompareB(const void *a
, const void *b
);
83 int FileCmp(PkgIterator A
,PkgIterator B
);
87 typedef Package
**iterator
;
90 enum Flags
{Added
= (1 << 0), AddPending
= (1 << 1),
91 Immediate
= (1 << 2), Loop
= (1 << 3),
92 UnPacked
= (1 << 4), Configured
= (1 << 5),
93 Removed
= (1 << 6), // Early Remove
96 States
= (UnPacked
| Configured
| Removed
)};
99 inline bool IsFlag(PkgIterator Pkg
,unsigned long F
) {return (Flags
[Pkg
->ID
] & F
) == F
;};
100 inline bool IsFlag(Package
*Pkg
,unsigned long F
) {return (Flags
[Pkg
->ID
] & F
) == F
;};
101 void Flag(PkgIterator Pkg
,unsigned long State
, unsigned long F
) {Flags
[Pkg
->ID
] = (Flags
[Pkg
->ID
] & (~F
)) | State
;};
102 inline void Flag(PkgIterator Pkg
,unsigned long F
) {Flags
[Pkg
->ID
] |= F
;};
103 inline void Flag(Package
*Pkg
,unsigned long F
) {Flags
[Pkg
->ID
] |= F
;};
104 inline bool IsNow(PkgIterator Pkg
) {return (Flags
[Pkg
->ID
] & (States
& (~Removed
))) == 0;};
105 bool IsMissing(PkgIterator Pkg
);
106 void WipeFlags(unsigned long F
);
107 void SetFileList(string
*FileList
) {this->FileList
= FileList
;};
110 inline iterator
begin() {return List
;};
111 inline iterator
end() {return End
;};
112 inline void push_back(Package
*Pkg
) {*(End
++) = Pkg
;};
113 inline void push_back(PkgIterator Pkg
) {*(End
++) = Pkg
;};
114 inline void pop_back() {End
--;};
115 inline bool empty() {return End
== List
;};
116 inline unsigned int size() {return End
- List
;};
119 bool OrderCritical();
120 bool OrderUnpack(string
*FileList
= 0);
121 bool OrderConfigure();
123 int Score(PkgIterator Pkg
);
125 pkgOrderList(pkgDepCache
&Cache
);