]>
git.saurik.com Git - apt.git/blob - apt-pkg/orderlist.h
1 // -*- mode: cpp; mode: fold -*-
3 // $Id: orderlist.h,v 1.9 2001/02/20 07:03:17 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 useful 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 #ifndef PKGLIB_ORDERLIST_H
17 #define PKGLIB_ORDERLIST_H
20 #include <apt-pkg/pkgcache.h>
21 #include <apt-pkg/macros.h>
24 class pkgOrderList
: protected pkgCache::Namespace
29 typedef bool (pkgOrderList::*DepFunc
)(DepIterator D
);
31 // These are the currently selected ordering functions
42 DepIterator Loops
[20];
45 unsigned short *Flags
;
48 // Main visit function
49 __deprecated
bool VisitNode(PkgIterator Pkg
) { return VisitNode(Pkg
, "UNKNOWN"); };
50 bool VisitNode(PkgIterator Pkg
, char const* from
);
51 bool VisitDeps(DepFunc F
,PkgIterator Pkg
);
52 bool VisitRDeps(DepFunc F
,PkgIterator Pkg
);
53 bool VisitRProvides(DepFunc F
,VerIterator Ver
);
54 bool VisitProvides(DepIterator Pkg
,bool Critical
);
56 // Dependency checking functions.
57 bool DepUnPackCrit(DepIterator D
);
58 bool DepUnPackPreD(DepIterator D
);
59 bool DepUnPackPre(DepIterator D
);
60 bool DepUnPackDep(DepIterator D
);
61 bool DepConfigure(DepIterator D
);
62 bool DepRemove(DepIterator D
);
65 bool AddLoop(DepIterator D
);
66 bool CheckDep(DepIterator D
);
70 static pkgOrderList
*Me
;
71 static int OrderCompareA(const void *a
, const void *b
);
72 static int OrderCompareB(const void *a
, const void *b
);
73 int FileCmp(PkgIterator A
,PkgIterator B
);
77 typedef Package
**iterator
;
80 enum Flags
{Added
= (1 << 0), AddPending
= (1 << 1),
81 Immediate
= (1 << 2), Loop
= (1 << 3),
82 UnPacked
= (1 << 4), Configured
= (1 << 5),
83 Removed
= (1 << 6), // Early Remove
86 States
= (UnPacked
| Configured
| Removed
)};
89 inline bool IsFlag(PkgIterator Pkg
,unsigned long F
) {return (Flags
[Pkg
->ID
] & F
) == F
;};
90 inline bool IsFlag(Package
*Pkg
,unsigned long F
) {return (Flags
[Pkg
->ID
] & F
) == F
;};
91 void Flag(PkgIterator Pkg
,unsigned long State
, unsigned long F
) {Flags
[Pkg
->ID
] = (Flags
[Pkg
->ID
] & (~F
)) | State
;};
92 inline void Flag(PkgIterator Pkg
,unsigned long F
) {Flags
[Pkg
->ID
] |= F
;};
93 inline void Flag(Package
*Pkg
,unsigned long F
) {Flags
[Pkg
->ID
] |= F
;};
94 inline bool IsNow(PkgIterator Pkg
) {return (Flags
[Pkg
->ID
] & (States
& (~Removed
))) == 0;};
95 bool IsMissing(PkgIterator Pkg
);
96 void WipeFlags(unsigned long F
);
97 void SetFileList(string
*FileList
) {this->FileList
= FileList
;};
100 inline iterator
begin() {return List
;};
101 inline iterator
end() {return End
;};
102 inline void push_back(Package
*Pkg
) {*(End
++) = Pkg
;};
103 inline void push_back(PkgIterator Pkg
) {*(End
++) = Pkg
;};
104 inline void pop_back() {End
--;};
105 inline bool empty() {return End
== List
;};
106 inline unsigned int size() {return End
- List
;};
109 bool OrderCritical();
110 bool OrderUnpack(string
*FileList
= 0);
111 bool OrderConfigure();
113 int Score(PkgIterator Pkg
);
115 pkgOrderList(pkgDepCache
*Cache
);