Flesh out the package kit solver API quite a bit more

* Reorganize things a bit:
  - BSolver is now an abstract base class.
  - A libsolv based implementation, LibsolvSolver, lives in a new
    add-on, which is loaded lazily.
  - Get rid of libpackage_solver. Save for LibsolvSolver everything
    is moved to libpackage.
  - This is a nicer solution for the cyclic dependency caused by
    libsolv (libsolvext to be precise) using the package kit for
    reading repositories and package files.
* Add a solver result data structure and and an accessor the solver.
* Add problem reporting support to the solver. There aren't data
  structures for the problem solutions yet and support for selecting
  solutions and re-solving is missing as well.
This commit is contained in:
Ingo Weinhold
2013-04-03 02:15:57 +00:00
parent 2d0563f357
commit 1a4d020daf
17 changed files with 1321 additions and 351 deletions
+22 -10
View File
@@ -13,30 +13,42 @@ namespace BPackageKit {
class BSolverPackageSpecifierList;
class BSolverProblem;
class BSolverRepository;
class BSolverResult;
class BSolver {
public:
BSolver();
~BSolver();
virtual ~BSolver();
status_t Init();
static status_t Create(BSolver*& _solver);
status_t AddRepository(BSolverRepository* repository);
virtual status_t Init() = 0;
status_t Install(
virtual status_t AddRepository(
BSolverRepository* repository) = 0;
virtual status_t Install(
const BSolverPackageSpecifierList&
packages);
packages) = 0;
private:
class Implementation;
bool HasProblems() const
{ return CountProblems() > 0; }
virtual int32 CountProblems() const = 0;
virtual BSolverProblem* ProblemAt(int32 index) const = 0;
private:
Implementation* fImplementation;
virtual status_t GetResult(BSolverResult& _result) = 0;
protected:
BSolver();
};
// function exported by the libsolv based add-on
extern "C" BSolver* create_solver();
} // namespace BPackageKit