libzypp  17.14.0
PoolItemBest.h
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
12 #ifndef ZYPP_POOLITEMBEST_H
13 #define ZYPP_POOLITEMBEST_H
14 
15 #include <iosfwd>
16 
17 #include "zypp/base/PtrTypes.h"
18 #include "zypp/base/Function.h"
19 #include "zypp/base/Iterator.h"
20 #include "zypp/base/Hash.h"
21 
22 #include "zypp/PoolItem.h"
23 
25 namespace zypp
26 {
27 
29  //
30  // CLASS NAME : PoolItemBest
31  //
64  {
65  typedef std::unordered_map<IdString,PoolItem> Container;
66  public:
68  typedef boost::function<bool ( const PoolItem & lhs, const PoolItem & rhs )> Predicate;
69 
71  typedef Container::value_type value_type;
74 
75  public:
77  static constexpr bool preferNotLocked = true;
78 
79  public:
81  PoolItemBest( bool preferNotLocked_r = false )
82  { _ctor_init( preferNotLocked_r ); }
83 
85  PoolItemBest( sat::Solvable slv_r, bool preferNotLocked_r = false )
86  { _ctor_init( preferNotLocked_r ); add( slv_r ); }
87 
89  PoolItemBest( const PoolItem & pi_r, bool preferNotLocked_r = false )
90  { _ctor_init( preferNotLocked_r ); add( pi_r ); }
91 
93  template<class TIterator>
94  PoolItemBest( TIterator begin_r, TIterator end_r, bool preferNotLocked_r = false )
95  { _ctor_init( preferNotLocked_r ); add( begin_r, end_r ); }
96 
97  public:
99  void add( sat::Solvable slv_r )
100  { add( PoolItem( slv_r ) ); }
101 
103  void add( const PoolItem & pi_r );
104 
106  template<class TIterator>
107  void add( TIterator begin_r, TIterator end_r )
108  {
109  for_( it, begin_r, end_r )
110  add( *it );
111  }
112 
113  public:
117  bool empty() const { return container().empty(); }
119  size_type size() const { return container().size(); }
121  iterator begin() const { return make_map_value_begin( container() ); }
123  iterator end() const { return make_map_value_end( container() ); }
124 
126  PoolItem find( IdString ident_r ) const;
128  PoolItem find( sat::Solvable slv_r ) const { return find( slv_r.ident() ); }
130  PoolItem find( const PoolItem & pi_r ) const { return find( pi_r.satSolvable().ident() ); }
132 
140 
141  private:
142  void _ctor_init( bool preferNotLocked_r );
143  void _ctor_init(/*preferNotLocked = false*/);
144  const Container & container() const;
145  private:
147  struct Impl;
149  RWCOW_pointer<Impl> & pimpl() { return *(reinterpret_cast<RWCOW_pointer<Impl>*>( _dont_use_this_use_pimpl.get() )); }
151  const RWCOW_pointer<Impl> & pimpl() const { return *(reinterpret_cast<RWCOW_pointer<Impl>*>( _dont_use_this_use_pimpl.get() )); }
153  shared_ptr<void> _dont_use_this_use_pimpl;
154  };
156 
158  std::ostream & operator<<( std::ostream & str, const PoolItemBest & obj );
159 
161 } // namespace zypp
163 #endif // ZYPP_POOLITEMBEST_H
Container::value_type value_type
Definition: PoolItemBest.h:71
A Solvable object within the sat Pool.
Definition: Solvable.h:53
void _ctor_init()
bin.compat legacy
Definition: PoolItemBest.cc:55
std::unordered_map< IdString, PoolItem > Container
Definition: PoolItemBest.h:65
shared_ptr< void > _dont_use_this_use_pimpl
Avoid need to include Impl definition when inlined ctors (due to tepmlate) are provided.
Definition: PoolItemBest.h:153
Container::size_type size_type
Definition: PoolItemBest.h:70
Helper filtering the files offered by a RepomdFileReader.
void add(TIterator begin_r, TIterator end_r)
Feed a range of sat::Solvable or PoolItem.
Definition: PoolItemBest.h:107
const Container & container() const
Definition: PoolItemBest.cc:58
boost::function< bool(const PoolItem &lhs, const PoolItem &rhs)> Predicate
Predicate returning True if lhs is a better choice.
Definition: PoolItemBest.h:68
PoolItem find(const PoolItem &pi_r) const
Definition: PoolItemBest.h:130
static constexpr bool preferNotLocked
Indicator argument for ctor: consider locked packages less than not locked packages.
Definition: PoolItemBest.h:77
String related utilities and Regular expression matching.
transform_iterator< GetPairSecond< typename MapType::value_type >, typename MapType::const_iterator > Value_const_iterator
The value iterator type.
Definition: Iterator.h:223
MapKVIteratorTraits< TMap >::Value_const_iterator make_map_value_begin(const TMap &map_r)
Convenience to create the value iterator from container::begin()
Definition: Iterator.h:238
Access to the sat-pools string space.
Definition: IdString.h:41
#define for_(IT, BEG, END)
Convenient for-loops using iterator.
Definition: Easy.h:28
PoolItemBest(bool preferNotLocked_r=false)
Default ctor.
Definition: PoolItemBest.h:81
MapKVIteratorTraits< Container >::Value_const_iterator iterator
Definition: PoolItemBest.h:72
MapKVIteratorTraits< TMap >::Key_const_iterator make_map_key_begin(const TMap &map_r)
Convenience to create the key iterator from container::begin()
Definition: Iterator.h:228
std::ostream & operator<<(std::ostream &str, const Exception &obj)
Definition: Exception.cc:147
MapKVIteratorTraits< Container >::Key_const_iterator ident_iterator
Definition: PoolItemBest.h:73
PoolItemBest(sat::Solvable slv_r, bool preferNotLocked_r=false)
Ctor feeding a sat::Solvable.
Definition: PoolItemBest.h:85
ident_iterator identBegin() const
Pointer to the first item.
Definition: PoolItemBest.h:136
MapKVIteratorTraits< TMap >::Key_const_iterator make_map_key_end(const TMap &map_r)
Convenience to create the key iterator from container::end()
Definition: Iterator.h:233
const RWCOW_pointer< Impl > & pimpl() const
Pointer to implementation.
Definition: PoolItemBest.h:151
bool empty() const
Whether PoolItems were collected.
Definition: PoolItemBest.h:117
PoolItemBest(TIterator begin_r, TIterator end_r, bool preferNotLocked_r=false)
Ctor feeding a range of sat::Solvable or PoolItem.
Definition: PoolItemBest.h:94
SolvableIdType size_type
Definition: PoolMember.h:126
MapKVIteratorTraits< TMap >::Value_const_iterator make_map_value_end(const TMap &map_r)
Convenience to create the value iterator from container::end()
Definition: Iterator.h:243
iterator begin() const
Pointer to the first PoolItem.
Definition: PoolItemBest.h:121
Find the best candidates e.g.
Definition: PoolItemBest.h:63
transform_iterator< GetPairFirst< typename MapType::value_type >, typename MapType::const_iterator > Key_const_iterator
The key iterator type.
Definition: Iterator.h:218
size_type size() const
Number of PoolItems collected.
Definition: PoolItemBest.h:119
ident_iterator identEnd() const
Pointer behind the last item.
Definition: PoolItemBest.h:138
RWCOW_pointer< Impl > & pimpl()
Pointer to implementation.
Definition: PoolItemBest.h:149
Combining sat::Solvable and ResStatus.
Definition: PoolItem.h:50
iterator end() const
Pointer behind the last PoolItem.
Definition: PoolItemBest.h:123
PoolItem find(sat::Solvable slv_r) const
Definition: PoolItemBest.h:128
void add(sat::Solvable slv_r)
Feed one sat::Solvable.
Definition: PoolItemBest.h:99
Easy-to use interface to the ZYPP dependency resolver.
Definition: CodePitfalls.doc:1
Solvable satSolvable() const
Return the corresponding sat::Solvable.
Definition: SolvableType.h:57
PoolItemBest(const PoolItem &pi_r, bool preferNotLocked_r=false)
Ctor feeding a PoolItem.
Definition: PoolItemBest.h:89
IdString ident() const
The identifier.
Definition: Solvable.cc:265
PoolItem find(IdString ident_r) const
Return the collected PoolItem with sat::Solvable::ident ident_r.
Definition: PoolItemBest.cc:85