libzypp  11.13.5
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