- initial import of revision 374 from cnc
[apt.git] / apt-pkg / policy.h
1 // -*- mode: cpp; mode: fold -*-
2 // Description                                                          /*{{{*/
3 // $Id: policy.h,v 1.1 2002/07/23 17:54:50 niemeyer Exp $
4 /* ######################################################################
5
6    Package Version Policy implementation
7
8    This implements the more advanced 'Version 4' APT policy engine. The
9    standard 'Version 0' engine is included inside the DepCache which is
10    it's historical location.
11    
12    The V4 engine allows the user to completly control all aspects of
13    version selection. There are three primary means to choose a version
14     * Selection by version match
15     * Selection by Release file match
16     * Selection by origin server
17    
18    Each package may be 'pinned' with a single criteria, which will ultimately
19    result in the selection of a single version, or no version, for each
20    package.
21    
22    Furthermore, the default selection can be influenced by specifying
23    the ordering of package files. The order is derived by reading the
24    package file preferences and assigning a priority to each package 
25    file.
26    
27    A special flag may be set to indicate if no version should be returned
28    if no matching versions are found, otherwise the default matching
29    rules are used to locate a hit.
30    
31    ##################################################################### */
32                                                                         /*}}}*/
33 #ifndef PKGLIB_POLICY_H
34 #define PKGLIB_POLICY_H
35
36 #ifdef __GNUG__
37 #pragma interface "apt-pkg/policy.h"
38 #endif
39
40 #include <apt-pkg/depcache.h>
41 #include <apt-pkg/versionmatch.h>
42 #include <vector>
43
44 using std::vector;
45
46 class pkgPolicy : public pkgDepCache::Policy
47 {
48    struct Pin
49    {
50       pkgVersionMatch::MatchType Type;
51       string Data;
52       signed short Priority;
53       Pin() : Type(pkgVersionMatch::None), Priority(0) {};
54    };
55
56    struct PkgPin : Pin
57    {
58       string Pkg;
59    };
60    
61    protected:
62    
63    Pin *Pins;
64    signed short *PFPriority;
65    vector<Pin> Defaults;
66    vector<PkgPin> Unmatched;
67    pkgCache *Cache;
68    bool StatusOverride;
69    
70    public:
71
72    // Things for manipulating pins
73    void CreatePin(pkgVersionMatch::MatchType Type,string Pkg,
74                   string Data,signed short Priority);
75    inline signed short GetPriority(pkgCache::PkgFileIterator const &File) 
76        {return PFPriority[File->ID];};
77    signed short GetPriority(pkgCache::PkgIterator const &Pkg);
78    pkgCache::VerIterator GetMatch(pkgCache::PkgIterator Pkg);
79
80    // CNC:2003-03-06
81    virtual signed short GetPkgPriority(const pkgCache::PkgIterator &Pkg);
82
83    // Things for the cache interface.
84    virtual pkgCache::VerIterator GetCandidateVer(pkgCache::PkgIterator Pkg);
85    // CNC:2002-03-17 - Every place that uses this function seems to
86    //                  currently check for IsCritical() as well. Since
87    //                  this is a virtual (heavy) function, we'll try
88    //                  not to use it while not necessary.
89    virtual bool IsImportantDep(pkgCache::DepIterator Dep) {return pkgDepCache::Policy::IsImportantDep(Dep);};
90    bool InitDefaults();
91    
92    pkgPolicy(pkgCache *Owner);
93    virtual ~pkgPolicy() {delete [] PFPriority; delete [] Pins;};
94 };
95
96 bool ReadPinFile(pkgPolicy &Plcy,string File = "");
97
98 #endif