22#ifndef ZYPP_SOLVER_DETAIL_RESOLVER_H
23#define ZYPP_SOLVER_DETAIL_RESOLVER_H
24#ifndef ZYPP_USE_RESOLVER_INTERNALS
25#error Do not directly include this file!
51 typedef std::list<PoolItem> PoolItemList;
52 typedef std::set<PoolItem> PoolItemSet;
66 typedef std::multimap<PoolItem,ItemCapKind> ItemCapKindMap;
69 SATResolver *_satResolver;
70 SerialNumberWatcher _poolchanged;
74 std::set<Repository> _upgradeRepos;
77 PoolItemList _addWeak;
84 bool _solveSrcPackages:1;
85 bool _ignoreAlreadyRecommended:1;
93 bool _applyDefault_focus:1;
94 bool _applyDefault_forceResolve:1;
95 bool _applyDefault_cleandepsOnRemove:1;
96 bool _applyDefault_onlyRequires:1;
97 bool _applyDefault_allowDowngrade:1;
98 bool _applyDefault_allowNameChange:1;
99 bool _applyDefault_allowArchChange:1;
100 bool _applyDefault_allowVendorChange:1;
101 bool _applyDefault_dupAllowDowngrade:1;
102 bool _applyDefault_dupAllowNameChange:1;
103 bool _applyDefault_dupAllowArchChange:1;
104 bool _applyDefault_dupAllowVendorChange:1;
109 solver::detail::SolverQueueItemList _removed_queue_items;
110 solver::detail::SolverQueueItemList _added_queue_items;
113 ItemCapKindMap _isInstalledBy;
114 ItemCapKindMap _installs;
115 ItemCapKindMap _satifiedByInstalled;
116 ItemCapKindMap _installedSatisfied;
119 void collectResolverInfo();
124 bool checkUnmaintainedItems ();
130 Resolver( ResPool pool );
135 std::ostream &
dumpOn( std::ostream & str )
const;
137 friend std::ostream&
operator<<( std::ostream& str,
const Resolver & obj )
138 {
return obj.dumpOn (str); }
142 ResPool pool()
const;
143 void setPool(
const ResPool & pool ) { _pool = pool; }
154 void setDefaultSolverFlags(
bool all_r );
156 void addUpgradeRepo( Repository repo_r ) {
if ( repo_r && ! repo_r.isSystemRepo() ) _upgradeRepos.insert( repo_r ); }
157 bool upgradingRepo( Repository repo_r )
const {
return( _upgradeRepos.find( repo_r ) != _upgradeRepos.end() ); }
158 void removeUpgradeRepo( Repository repo_r ) { _upgradeRepos.erase( repo_r ); }
159 void removeUpgradeRepos() { _upgradeRepos.clear(); }
160 const std::set<Repository> & upgradeRepos()
const {
return _upgradeRepos; }
162 void addExtraRequire(
const Capability & capability );
163 void removeExtraRequire(
const Capability & capability );
164 void addExtraConflict(
const Capability & capability );
165 void removeExtraConflict(
const Capability & capability );
167 void removeQueueItem(
const SolverQueueItem_Ptr& item );
168 void addQueueItem(
const SolverQueueItem_Ptr& item );
170 CapabilitySet extraRequires()
const {
return _extra_requires; }
171 CapabilitySet extraConflicts()
const {
return _extra_conflicts; }
173 void addWeak(
const PoolItem & item );
177 bool resolveQueue( SolverQueueItemList & queue );
181 PoolItemList problematicUpdateItems()
const;
185 bool ignoreAlreadyRecommended()
const {
return _ignoreAlreadyRecommended; }
186 void setIgnoreAlreadyRecommended(
bool yesno_r ) { _ignoreAlreadyRecommended = yesno_r; }
188 bool isUpgradeMode()
const {
return _upgradeMode; }
189 void setUpgradeMode(
bool yesno_r ) { _upgradeMode = yesno_r; }
191 bool isUpdateMode()
const {
return _updateMode; }
192 void setUpdateMode(
bool yesno_r ) { _updateMode = yesno_r; }
194 bool isVerifyingMode()
const {
return _verifying; }
195 void setVerifyingMode( TriBool state_r ) { _verifying = indeterminate(state_r) ? false : bool(state_r); }
197 bool solveSrcPackages()
const {
return _solveSrcPackages; }
198 void setSolveSrcPackages( TriBool state_r ) { _solveSrcPackages = indeterminate(state_r) ? false : bool(state_r); }
201 void setRemoveOrphaned(
bool yesno_r );
202 bool removeOrphaned()
const;
204 void setRemoveUnneeded(
bool yesno_r );
205 bool removeUnneeded()
const;
207 void setFocus( ResolverFocus focus_r );
210#define ZOLV_FLAG_TRIBOOL( ZSETTER, ZGETTER ) \
211 void ZSETTER( TriBool state_r ); \
212 bool ZGETTER() const; \
225#undef ZOLV_FLAG_TRIBOOL
229 void applySolutions(
const ProblemSolutionList & solutions );
230 bool applySolution(
const ProblemSolution & solution );
233 sat::Transaction getTransaction();
238 void reset(
bool keepExtras =
false );
250 sat::detail::CSolver * get()
const;
std::ostream & operator<<(std::ostream &str, const zypp::sat::detail::CDataiterator *obj)
#define ZOLV_FLAG_TRIBOOL(ZSETTER, ZDEFAULT, ZGETTER)
Common types used in the Resolver public API and need to be passed down to the details tree.
Libsolv transaction wrapper.
boost::noncopyable NonCopyable
Ensure derived classes cannot be copied.
std::list< ItemCapKind > ItemCapKindList
Easy-to use interface to the ZYPP dependency resolver.
ResolverFocus
The resolver's general attitude.
std::ostream & dumpOn(std::ostream &str, const Capability &obj)
std::list< ResolverProblem_Ptr > ResolverProblemList
std::unordered_set< Capability > CapabilitySet
#define ZYPP_API_DEPTESTOMATIC