29 static const Capability autopattern(
"autopattern()" );
30 for (
const auto & cap : provides_r )
49 using PatternMap = std::map<Pattern::constPtr, DefaultIntegral<bool, false>>;
50 using size_type = PatternMap::size_type;
51 using value_type = PatternMap::key_type;
69 expandIncludes( unprocessed );
70 expandExtending( unprocessed );
71 _patternMap[unprocessed] =
true;
73 }
while( (unprocessed = nextUnprocessed()) );
76 return _patternMap.size();
79 const_iterator begin()
const
82 const_iterator end()
const
89 for_( it, _patternMap.begin(), _patternMap.end() )
102 for_( it, c.begin(), c.end() )
104 expandInclude( Capability( it->c_str() ) );
109 void expandInclude(
const Capability & include_r )
111 sat::WhatProvides w( include_r );
112 for_( it, w.begin(), w.end() )
123 for_( it, pool.byKindBegin<Pattern>(), pool.byKindEnd<Pattern>() )
125 expandIfExtends( pat_r, *it );
130 void expandIfExtends(
const Pattern::constPtr & pat_r,
const PoolItem & extending_r )
134 for_( it, c.begin(), c.end() )
136 if ( providedBy( pat_r, Capability( it->c_str() ) ) )
139 _patternMap[extending];
151 sat::Solvable pat( pat_r->satSolvable() );
152 sat::WhatProvides w( extends_r );
153 for_( it, w.begin(), w.end() )
162 PatternMap _patternMap;
234 caps_r.insert( c.begin(),c.end() );
246 addCaps( caps, *
this, Dep::REQUIRES );
250 addCaps( caps, depKeeper, Dep::REQUIRES );
264 addCaps( caps, *
this, Dep::REQUIRES );
265 addCaps( caps, *
this, Dep::RECOMMENDS );
266 if ( includeSuggests_r )
267 addCaps( caps, *
this, Dep::SUGGESTS );
272 addCaps( caps, depKeeper, Dep::REQUIRES );
273 addCaps( caps, depKeeper, Dep::RECOMMENDS );
274 if ( includeSuggests_r )
275 addCaps( caps, depKeeper, Dep::SUGGESTS );
286 PatternExpander expander;
287 if ( ! expander.doExpand(
this ) )
291 for_( it, expander.begin(), expander.end() )
293 Contents c( (*it)->depends( includeSuggests_r ) );
307 addCaps( caps, depKeeper_r, dep_r );
311 const PoolItem & pi( sel->theObj() );
318 inline void dependsSet(
sat::Solvable depKeeper_r, Pattern::ContentsSet & collect_r )
320 dependsSetDoCollect( depKeeper_r, Dep::REQUIRES, collect_r.req );
321 dependsSetDoCollect( depKeeper_r, Dep::RECOMMENDS, collect_r.rec ),
322 dependsSetDoCollect( depKeeper_r, Dep::SUGGESTS, collect_r.sug );
328 static const Capability indicator(
"pattern()" );
329 return depKeeper_r.dep_provides().matches( indicator );
333 void Pattern::contentsSet( ContentsSet & collect_r,
bool recursively_r )
const
340 std::set<sat::Solvable> recTodo;
341 std::set<sat::Solvable> allDone;
345 std::set<sat::Solvable> reqTodo;
347 collect_r.req.insert( depKeeper );
348 reqTodo.insert( depKeeper );
350 while ( ! reqTodo.empty() )
353 depKeeper = ( *reqTodo.begin() );
354 reqTodo.erase( reqTodo.begin() );
355 allDone.insert( depKeeper );
359 dependsSet( depKeeper, result );
362 for ( sat::Solvable solv : result.req )
364 if ( collect_r.req.insert( solv ) && recursively_r && isPatternsPackage( solv ) )
365 reqTodo.insert( solv );
367 for ( sat::Solvable solv : result.rec )
369 if ( collect_r.rec.insert( solv ) && recursively_r && isPatternsPackage( solv ) )
370 recTodo.insert( solv );
372 for ( sat::Solvable solv : result.sug )
374 collect_r.sug.insert( solv );
379 while ( ! recTodo.empty() )
382 depKeeper = ( *recTodo.begin() );
383 recTodo.erase( recTodo.begin() );
384 if ( ! allDone.insert( depKeeper ).second )
389 dependsSet( depKeeper, result );
392 for ( sat::Solvable solv : result.req )
395 if ( collect_r.rec.insert( solv ) && recursively_r && isPatternsPackage( solv ) )
396 recTodo.insert( solv );
398 for ( sat::Solvable solv : result.rec )
400 if ( collect_r.rec.insert( solv ) && recursively_r && isPatternsPackage( solv ) )
401 recTodo.insert( solv );
403 for ( sat::Solvable solv : result.sug )
405 collect_r.sug.insert( solv );
#define for_(IT, BEG, END)
Convenient for-loops using iterator.
static const CapMatch yes
Container of Capability (currently read only).
CapDetail detail() const
Helper providing more detailed information about a Capability.
std::string asString() const
Access to the sat-pools string space.
'Language[_Country]' codes.
Contents core() const
Ui hint: Required Packages.
NameList extends() const
Ui hint: patterns this one extends.
std::string category(const Locale &lang_r=Locale()) const
TraitsType::constPtrType constPtr
Contents depends(bool includeSuggests_r=true) const
Ui hint: Dependent packages.
sat::SolvableSet Contents
Pattern(const sat::Solvable &solvable_r)
Ctor.
std::string order() const
sat::Solvable autoPackage() const
The corresponding patterns- package if isAutoPattern.
NameList includes() const
Ui hint: included patterns.
sat::ArrayAttr< IdString, IdString > NameList
Contents contents(bool includeSuggests_r=true) const
The collection of packages associated with this pattern.
bool isAutoPattern() const
This patterns is auto-defined by a patterns- package.
Combining sat::Solvable and ResStatus.
ResObject(const sat::Solvable &solvable_r)
Ctor.
static ResPool instance()
Singleton ctor.
ByKind byKind()
templated convenience ctor.
static const SolvAttr icon
static const SolvAttr isvisible
static const SolvAttr category
static const SolvAttr isdefault
static const SolvAttr extends
static const SolvAttr script
static const SolvAttr order
static const SolvAttr includes
Container & get()
The set.
bool insert(const TSolv &solv_r)
Insert a Solvable.
const_iterator end() const
Iterator pointing behind the last Solvable.
const_iterator begin() const
Iterator pointing to the first Solvable.
A Solvable object within the sat Pool.
Container of Solvable providing a Capability (read only).
intrusive_ptr< Selectable > Ptr
Easy-to use interface to the ZYPP dependency resolver.
MapKVIteratorTraits< TMap >::Key_const_iterator make_map_key_begin(const TMap &map_r)
Convenience to create the key iterator from container::begin().
filter_iterator< TFilter, typename TContainer::const_iterator > make_filter_begin(TFilter f, const TContainer &c)
Convenience to create filter_iterator from container::begin().
MapKVIteratorTraits< TMap >::Key_const_iterator make_map_key_end(const TMap &map_r)
Convenience to create the key iterator from container::end().
std::unordered_set< Capability > CapabilitySet
filter_iterator< TFilter, typename TContainer::const_iterator > make_filter_end(TFilter f, const TContainer &c)
Convenience to create filter_iterator from container::end().
ResTraits< TRes >::PtrType asKind(const sat::Solvable &solvable_r)
Directly create a certain kind of ResObject from sat::Solvable.
Enumeration class of dependency types.
transform_iterator< GetPairFirst< typename MapType::value_type >, typename MapType::const_iterator > Key_const_iterator
The key iterator type.
bool lookupBoolAttribute(const SolvAttr &attr) const
Capabilities dep_provides() const
std::string lookupStrAttribute(const SolvAttr &attr) const
Solvable satSolvable() const
Repository repository() const
#define IMPL_PTR_TYPE(NAME)