libzypp  13.10.6
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/Tr1hash.h"
21 
22 #include "zypp/PoolItem.h"
23 
25 namespace zypp
26 {
27 
29  //
30  // CLASS NAME : PoolItemBest
31  //
61  {
62  typedef std::tr1::unordered_map<IdString,PoolItem> Container;
63  public:
65  typedef boost::function<bool ( const PoolItem & lhs, const PoolItem & rhs )> Predicate;
66 
68  typedef Container::value_type value_type;
71 
72  public:
75  {}
76 
79  { _ctor_init(); add( slv_r ); }
80 
82  PoolItemBest( const PoolItem & pi_r )
83  { _ctor_init(); add( pi_r ); }
84 
86  template<class _Iterator>
87  PoolItemBest( _Iterator begin_r, _Iterator end_r )
88  { _ctor_init(); add( begin_r, end_r ); }
89 
90  public:
92  void add( sat::Solvable slv_r )
93  { add( PoolItem( slv_r ) ); }
94 
96  void add( const PoolItem & pi_r );
97 
99  template<class _Iterator>
100  void add( _Iterator begin_r, _Iterator end_r )
101  {
102  for_( it, begin_r, end_r )
103  add( *it );
104  }
105 
106  public:
110  bool empty() const { return container().empty(); }
112  size_type size() const { return container().size(); }
114  iterator begin() const { return make_map_value_begin( container() ); }
116  iterator end() const { return make_map_value_end( container() ); }
117 
119  PoolItem find( IdString ident_r ) const;
121  PoolItem find( sat::Solvable slv_r ) const { return find( slv_r.ident() ); }
123  PoolItem find( const PoolItem & pi_r ) const { return find( pi_r.satSolvable().ident() ); }
125 
133 
134  private:
135  void _ctor_init();
136  const Container & container() const;
137  private:
139  class Impl;
141  RWCOW_pointer<Impl> & pimpl() { return *(reinterpret_cast<RWCOW_pointer<Impl>*>( _dont_use_this_use_pimpl.get() )); }
143  const RWCOW_pointer<Impl> & pimpl() const { return *(reinterpret_cast<RWCOW_pointer<Impl>*>( _dont_use_this_use_pimpl.get() )); }
145  shared_ptr<void> _dont_use_this_use_pimpl;
146  };
148 
150  std::ostream & operator<<( std::ostream & str, const PoolItemBest & obj );
151 
153 } // namespace zypp
155 #endif // ZYPP_POOLITEMBEST_H
Container::value_type value_type
Definition: PoolItemBest.h:68
A Solvable object within the sat Pool.
Definition: Solvable.h:55
IdString ident() const
The identifier.
Definition: Solvable.cc:165
bool empty() const
Whether PoolItems were collected.
Definition: PoolItemBest.h:110
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:145
MapKVIteratorTraits< _Map >::Value_const_iterator make_map_value_end(const _Map &map_r)
Convenience to create the value iterator from container::end()
Definition: Iterator.h:241
iterator begin() const
Pointer to the first PoolItem.
Definition: PoolItemBest.h:114
Container::size_type size_type
Definition: PoolItemBest.h:67
ident_iterator identBegin() const
Pointer to the first item.
Definition: PoolItemBest.h:129
boost::function< bool(const PoolItem &lhs, const PoolItem &rhs)> Predicate
Predicate returning True if lhs is a better choice.
Definition: PoolItemBest.h:65
transform_iterator< GetPairFirst< typename MapType::value_type >, typename MapType::const_iterator > Key_const_iterator
The key iterator type.
Definition: Iterator.h:216
size_type size() const
Number of PoolItems collected.
Definition: PoolItemBest.h:112
Access to the sat-pools string space.
Definition: IdString.h:39
#define for_(IT, BEG, END)
Convenient for-loops using iterator.
Definition: Easy.h:27
PoolItemBest(_Iterator begin_r, _Iterator end_r)
Ctor feeding a range of sat::Solvable or PoolItem.
Definition: PoolItemBest.h:87
transform_iterator< GetPairSecond< typename MapType::value_type >, typename MapType::const_iterator > Value_const_iterator
The value iterator type.
Definition: Iterator.h:221
std::tr1::unordered_map< IdString, PoolItem > Container
Definition: PoolItemBest.h:62
MapKVIteratorTraits< Container >::Value_const_iterator iterator
Definition: PoolItemBest.h:69
PoolItem find(IdString ident_r) const
Return the collected PoolItem with sat::Solvable::ident ident_r.
Definition: PoolItemBest.cc:61
PoolItemBest(const PoolItem &pi_r)
Ctor feeding a PoolItem.
Definition: PoolItemBest.h:82
MapKVIteratorTraits< _Map >::Value_const_iterator make_map_value_begin(const _Map &map_r)
Convenience to create the value iterator from container::begin()
Definition: Iterator.h:236
std::ostream & operator<<(std::ostream &str, const Exception &obj)
Definition: Exception.cc:120
MapKVIteratorTraits< Container >::Key_const_iterator ident_iterator
Definition: PoolItemBest.h:70
const RWCOW_pointer< Impl > & pimpl() const
Pointer to implementation.
Definition: PoolItemBest.h:143
SolvableIdType size_type
Definition: PoolMember.h:99
Find the best candidates e.g.
Definition: PoolItemBest.h:60
MapKVIteratorTraits< _Map >::Key_const_iterator make_map_key_begin(const _Map &map_r)
Convenience to create the key iterator from container::begin()
Definition: Iterator.h:226
void add(_Iterator begin_r, _Iterator end_r)
Feed a range of sat::Solvable or PoolItem.
Definition: PoolItemBest.h:100
ident_iterator identEnd() const
Pointer behind the last item.
Definition: PoolItemBest.h:131
const Container & container() const
Definition: PoolItemBest.cc:50
PoolItemBest()
Default ctor.
Definition: PoolItemBest.h:74
PoolItem find(sat::Solvable slv_r) const
Definition: PoolItemBest.h:121
sat::Solvable satSolvable() const
Return the corresponding sat::Solvable.
Definition: PoolItem.h:114
RWCOW_pointer< Impl > & pimpl()
Pointer to implementation.
Definition: PoolItemBest.h:141
Reference to a PoolItem connecting ResObject and ResStatus.
Definition: PoolItem.h:50
void add(sat::Solvable slv_r)
Feed one sat::Solvable.
Definition: PoolItemBest.h:92
iterator end() const
Pointer behind the last PoolItem.
Definition: PoolItemBest.h:116
MapKVIteratorTraits< _Map >::Key_const_iterator make_map_key_end(const _Map &map_r)
Convenience to create the key iterator from container::end()
Definition: Iterator.h:231
PoolItem find(const PoolItem &pi_r) const
Definition: PoolItemBest.h:123
PoolItemBest(sat::Solvable slv_r)
Ctor feeding a sat::Solvable.
Definition: PoolItemBest.h:78
RW_pointer supporting &#39;copy on write&#39; functionality.
Definition: PtrTypes.h:438