1/*
2 * Copyright 2013, Haiku, Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _PACKAGE__SOLVER_PROBLEM_H_
6#define _PACKAGE__SOLVER_PROBLEM_H_
7
8
9#include <ObjectList.h>
10#include <package/PackageResolvableExpression.h>
11
12
13namespace BPackageKit {
14
15
16class BSolverPackage;
17class BSolverProblemSolution;
18
19
20class BSolverProblem {
21public:
22			enum BType {
23				B_UNSPECIFIED,
24				B_NOT_IN_DISTUPGRADE_REPOSITORY,
25				B_INFERIOR_ARCHITECTURE,
26				B_INSTALLED_PACKAGE_PROBLEM,
27				B_CONFLICTING_REQUESTS,
28				B_REQUESTED_RESOLVABLE_NOT_PROVIDED,
29				B_REQUESTED_RESOLVABLE_PROVIDED_BY_SYSTEM,
30				B_DEPENDENCY_PROBLEM,
31				B_PACKAGE_NOT_INSTALLABLE,
32				B_DEPENDENCY_NOT_PROVIDED,
33				B_PACKAGE_NAME_CLASH,
34				B_PACKAGE_CONFLICT,
35				B_PACKAGE_OBSOLETES_RESOLVABLE,
36				B_INSTALLED_PACKAGE_OBSOLETES_RESOLVABLE,
37				B_PACKAGE_IMPLICITLY_OBSOLETES_RESOLVABLE,
38				B_DEPENDENCY_NOT_INSTALLABLE,
39				B_SELF_CONFLICT
40			};
41
42public:
43								BSolverProblem(BType type,
44									BSolverPackage* sourcePackage,
45									BSolverPackage* targetPackage = NULL);
46								BSolverProblem(BType type,
47									BSolverPackage* sourcePackage,
48									BSolverPackage* targetPackage,
49									const BPackageResolvableExpression&
50										dependency);
51								~BSolverProblem();
52
53			BType				Type() const;
54			BSolverPackage*		SourcePackage() const;
55			BSolverPackage*		TargetPackage() const;
56			const BPackageResolvableExpression& Dependency() const;
57
58			int32				CountSolutions() const;
59			const BSolverProblemSolution* SolutionAt(int32 index) const;
60
61			bool				AppendSolution(
62									BSolverProblemSolution* solution);
63
64			BString				ToString() const;
65
66private:
67			typedef BObjectList<BSolverProblemSolution> SolutionList;
68
69private:
70			BType				fType;
71			BSolverPackage*		fSourcePackage;
72			BSolverPackage*		fTargetPackage;
73			BPackageResolvableExpression fDependency;
74			SolutionList		fSolutions;
75};
76
77
78}	// namespace BPackageKit
79
80
81#endif // _PACKAGE__SOLVER_PROBLEM_H_
82