libzypp  16.22.5
SolvableSet.h
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
12 #ifndef ZYPP_SAT_SOLVABLESET_H
13 #define ZYPP_SAT_SOLVABLESET_H
14 
15 #include <iosfwd>
16 
17 #include "zypp/base/PtrTypes.h"
18 #include "zypp/base/Hash.h"
19 #include "zypp/sat/Solvable.h"
20 #include "zypp/sat/SolvIterMixin.h"
21 
23 namespace zypp
24 {
25  namespace sat
27  {
28 
30  //
31  // CLASS NAME : SolvableSet
32  //
35  class SolvableSet : public SolvIterMixin<SolvableSet,std::unordered_set<Solvable>::const_iterator>
36  {
37  friend std::ostream & operator<<( std::ostream & str, const SolvableSet & obj );
38 
39  public:
40  typedef std::unordered_set<Solvable> Container;
41  typedef Container::value_type value_type;
43  typedef Solvable_iterator const_iterator; // from SolvIterMixin
44 
45  public:
48  : _pimpl( new Container )
49  {}
50 
52  template<class TInputIterator>
53  SolvableSet( TInputIterator begin_r, TInputIterator end_r )
54  : _pimpl( new Container( begin_r, end_r ) )
55  {}
56 
57  public:
59  bool empty() const
60  { return _pimpl->empty(); }
61 
63  size_type size() const
64  { return _pimpl->size(); }
65 
67  template<class TSolv>
68  bool contains( const TSolv & solv_r ) const
69  { return( get().count( asSolvable()( solv_r ) ) ); }
70 
73  { return _pimpl->begin(); }
74 
77  { return _pimpl->end(); }
78 
79  public:
81  void clear()
82  { get().clear(); }
83 
87  template<class TSolv>
88  bool insert( const TSolv & solv_r )
89  { return get().insert( asSolvable()( solv_r ) ).second; }
90 
92  template<class TIterator>
93  void insert( TIterator begin_r, TIterator end_r )
94  { for_( it, begin_r, end_r ) insert( *it ); }
95 
96  public:
98  Container & get()
99  { return *_pimpl; }
100 
102  const Container & get() const
103  { return *_pimpl; }
104 
105  private:
108  };
110 
112  std::ostream & operator<<( std::ostream & str, const SolvableSet & obj );
113 
115  } // namespace sat
118 } // namespace zypp
120 #endif // ZYPP_SAT_SOLVABLESET_H
bool contains(const TSolv &solv_r) const
Definition: SolvableSet.h:68
SolvableSet()
Default ctor.
Definition: SolvableSet.h:47
std::ostream & operator<<(std::ostream &str, const FileConflicts &obj)
RWCOW_pointer< Container > _pimpl
Pointer to implementation.
Definition: SolvableSet.h:107
#define for_(IT, BEG, END)
Convenient for-loops using iterator.
Definition: Easy.h:27
const_iterator begin() const
Iterator pointing to the first Solvable.
Definition: SolvableSet.h:72
size_type size() const
Size of the set.
Definition: SolvableSet.h:63
const_iterator end() const
Iterator pointing behind the last Solvable.
Definition: SolvableSet.h:76
Base class providing common iterator types based on a Solvable iterator.
Container::value_type value_type
Definition: SolvableSet.h:41
bool empty() const
Whether the set is epmty.
Definition: SolvableSet.h:59
SolvableIdType size_type
Definition: PoolMember.h:152
std::unordered_set< Solvable > Container
Definition: SolvableSet.h:40
Solvable_iterator const_iterator
Definition: SolvableSet.h:43
void insert(TIterator begin_r, TIterator end_r)
Insert a range of Solvables.
Definition: SolvableSet.h:93
void clear()
Clear the container.
Definition: SolvableSet.h:81
Container::size_type size_type
Definition: SolvableSet.h:42
To Solvable transform functor.
Definition: Solvable.h:552
friend std::ostream & operator<<(std::ostream &str, const SolvableSet &obj)
Definition: SolvableSet.cc:31
SolvableSet(TInputIterator begin_r, TInputIterator end_r)
Ctor building a set from a range.
Definition: SolvableSet.h:53
bool insert(const TSolv &solv_r)
Insert a Solvable.
Definition: SolvableSet.h:88
Solvable set wrapper to allow adding additional convenience iterators.
Definition: SolvableSet.h:35