00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #ifndef PKGLIB_POLICY_H
00034 #define PKGLIB_POLICY_H
00035
00036
00037 #include <apt-pkg/depcache.h>
00038 #include <apt-pkg/versionmatch.h>
00039 #include <vector>
00040
00041 using std::vector;
00042
00043 class pkgPolicy : public pkgDepCache::Policy
00044 {
00045 protected:
00046
00047 struct Pin
00048 {
00049 pkgVersionMatch::MatchType Type;
00050 string Data;
00051 signed short Priority;
00052 Pin() : Type(pkgVersionMatch::None), Priority(0) {};
00053 };
00054
00055 struct PkgPin : Pin
00056 {
00057 string Pkg;
00058 };
00059
00060 Pin *Pins;
00061 signed short *PFPriority;
00062 vector<Pin> Defaults;
00063 vector<PkgPin> Unmatched;
00064 pkgCache *Cache;
00065 bool StatusOverride;
00066
00067 public:
00068
00069
00070 void CreatePin(pkgVersionMatch::MatchType Type,string Pkg,
00071 string Data,signed short Priority);
00072 inline signed short GetPriority(pkgCache::PkgFileIterator const &File)
00073 {return PFPriority[File->ID];};
00074 signed short GetPriority(pkgCache::PkgIterator const &Pkg);
00075 pkgCache::VerIterator GetMatch(pkgCache::PkgIterator const &Pkg);
00076
00077
00078 virtual pkgCache::VerIterator GetCandidateVer(pkgCache::PkgIterator const &Pkg);
00079 virtual bool IsImportantDep(pkgCache::DepIterator const &Dep) {return pkgDepCache::Policy::IsImportantDep(Dep);};
00080 bool InitDefaults();
00081
00082 pkgPolicy(pkgCache *Owner);
00083 virtual ~pkgPolicy() {delete [] PFPriority; delete [] Pins;};
00084 };
00085
00086 bool ReadPinFile(pkgPolicy &Plcy,string File = "");
00087 bool ReadPinDir(pkgPolicy &Plcy,string Dir = "");
00088
00089 #endif