libzypp  17.14.0
PoolItemBest.cc
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
12 #include <iostream>
13 #include "zypp/base/LogTools.h"
14 
15 #include "zypp/PoolItemBest.h"
17 
18 using std::endl;
19 
21 namespace zypp
22 {
23 
25  //
26  // CLASS NAME : PoolItemBest::Impl
27  //
30  {
31  Impl( bool preferNotLocked_r )
32  : _preferNotLocked { preferNotLocked_r }
33  {}
34 
37 
38  private:
39  friend Impl * rwcowClone<Impl>( const Impl * rhs );
41  Impl * clone() const
42  { return new Impl( *this ); }
43  };
45 
47  //
48  // CLASS NAME : PoolItemBest
49  //
51 
52  void PoolItemBest::_ctor_init( bool preferNotLocked_r )
53  { _dont_use_this_use_pimpl.reset( new RWCOW_pointer<Impl>(new Impl( preferNotLocked_r )) ); }
54 
56  { _ctor_init( /*preferNotLocked*/false ); }
57 
59  { return pimpl()->_container; }
60 
61  void PoolItemBest::add( const PoolItem & pi_r )
62  {
63  Container & container( pimpl()->_container );
64 
65  PoolItem & ccand( container[pi_r.satSolvable().ident()] );
66  if ( ! ccand )
67  ccand = pi_r;
68  else if ( pimpl()->_preferNotLocked )
69  {
70  if ( ! pi_r.status().isLocked() )
71  {
72  if ( ccand.status().isLocked() || ui::SelectableTraits::AVOrder()( pi_r, ccand ) )
73  ccand = pi_r;
74  }
75  else if ( ccand.status().isLocked() )
76  {
77  if ( ui::SelectableTraits::AVOrder()( pi_r, ccand ) )
78  ccand = pi_r;
79  }
80  }
81  else if ( ui::SelectableTraits::AVOrder()( pi_r, ccand ) )
82  ccand = pi_r;
83  }
84 
86  {
87  const Container & container( pimpl()->_container );
88  Container::const_iterator it( container.find( ident_r ) );
89  return it != container.end() ? it->second : PoolItem();
90  }
91 
92  /******************************************************************
93  **
94  ** FUNCTION NAME : operator<<
95  ** FUNCTION TYPE : std::ostream &
96  */
97  std::ostream & operator<<( std::ostream & str, const PoolItemBest & obj )
98  {
99  return dumpRange( str << "(" << obj.size() << ") ", obj.begin(), obj.end() );
100  }
101 
103 } // namespace zypp