diff options
Diffstat (limited to 'apt-pkg/algorithms.h')
-rw-r--r-- | apt-pkg/algorithms.h | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/apt-pkg/algorithms.h b/apt-pkg/algorithms.h new file mode 100644 index 000000000..0dd77d940 --- /dev/null +++ b/apt-pkg/algorithms.h @@ -0,0 +1,91 @@ +// -*- mode: cpp; mode: fold -*- +// Description /*{{{*/ +// $Id: algorithms.h,v 1.1 1998/07/07 04:17:00 jgg Exp $ +/* ###################################################################### + + Algorithms - A set of misc algorithms + + This simulate class displays what the ordering code has done and + analyses it with a fresh new dependency cache. In this way we can + see all of the effects of an upgrade run. + + pkgDistUpgrade computes an upgrade that causes as many packages as + possible to move to the newest verison. + + pkgApplyStatus sets the target state based on the content of the status + field in the status file. It is important to get proper crash recovery. + + ##################################################################### */ + /*}}}*/ +// Header section: pkglib +#ifndef PKGLIB_ALGORITHMS_H +#define PKGLIB_ALGORITHMS_H + +#ifdef __GNUG__ +#pragma interface "pkglib/algorithms.h" +#endif + +#include <pkglib/packagemanager.h> +#include <pkglib/depcache.h> + +class pkgSimulate : public pkgPackageManager +{ + protected: + + unsigned char *Flags; + + pkgDepCache Sim; + + // The Actuall installation implementation + virtual bool Install(PkgIterator Pkg,string File); + virtual bool Configure(PkgIterator Pkg); + virtual bool Remove(PkgIterator Pkg); + void ShortBreaks(); + + public: + + pkgSimulate(pkgDepCache &Cache); +}; + +class pkgProblemResolver +{ + pkgDepCache &Cache; + typedef pkgCache::PkgIterator PkgIterator; + typedef pkgCache::VerIterator VerIterator; + typedef pkgCache::DepIterator DepIterator; + typedef pkgCache::PrvIterator PrvIterator; + typedef pkgCache::Version Version; + typedef pkgCache::Package Package; + + enum Flags {Protected = (1 << 0), PreInstalled = (1 << 1), + Upgradable = (1 << 2)}; + signed short *Scores; + unsigned char *Flags; + bool Debug; + + // Sort stuff + static pkgProblemResolver *This; + static int ScoreSort(const void *a,const void *b); + + struct PackageKill + { + PkgIterator Pkg; + DepIterator Dep; + }; + + void MakeScores(); + bool DoUpgrade(pkgCache::PkgIterator Pkg); + + public: + + inline void Protect(pkgCache::PkgIterator Pkg) {Flags[Pkg->ID] |= Protected;}; + bool Resolve(bool BrokenFix = false); + + pkgProblemResolver(pkgDepCache &Cache); +}; + +bool pkgDistUpgrade(pkgDepCache &Cache); +bool pkgApplyStatus(pkgDepCache &Cache); +bool pkgFixBroken(pkgDepCache &Cache); + +#endif |