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