libzypp 17.31.23
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>
21
23namespace zypp
24{
26 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;
42 typedef Container::size_type size_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
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:
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
Base class providing common iterator types based on a Solvable iterator.
Solvable set wrapper to allow adding additional convenience iterators.
Definition: SolvableSet.h:36
Container & get()
The set.
Definition: SolvableSet.h:98
RWCOW_pointer< Container > _pimpl
Pointer to implementation.
Definition: SolvableSet.h:107
const Container & get() const
The set.
Definition: SolvableSet.h:102
std::unordered_set< Solvable > Container
Definition: SolvableSet.h:40
void clear()
Clear the container.
Definition: SolvableSet.h:81
bool empty() const
Whether the set is epmty.
Definition: SolvableSet.h:59
Container::value_type value_type
Definition: SolvableSet.h:41
size_type size() const
Size of the set.
Definition: SolvableSet.h:63
Container::size_type size_type
Definition: SolvableSet.h:42
bool insert(const TSolv &solv_r)
Insert a Solvable.
Definition: SolvableSet.h:88
const_iterator end() const
Iterator pointing behind the last Solvable.
Definition: SolvableSet.h:76
friend std::ostream & operator<<(std::ostream &str, const SolvableSet &obj)
Definition: SolvableSet.cc:31
bool contains(const TSolv &solv_r) const
Definition: SolvableSet.h:68
void insert(TIterator begin_r, TIterator end_r)
Insert a range of Solvables.
Definition: SolvableSet.h:93
SolvableSet()
Default ctor.
Definition: SolvableSet.h:47
const_iterator begin() const
Iterator pointing to the first Solvable.
Definition: SolvableSet.h:72
SolvableSet(TInputIterator begin_r, TInputIterator end_r)
Ctor building a set from a range.
Definition: SolvableSet.h:53
Solvable_iterator const_iterator
Definition: SolvableSet.h:43
String related utilities and Regular expression matching.
std::ostream & operator<<(std::ostream &str, const FileConflicts &obj)
Easy-to use interface to the ZYPP dependency resolver.
Definition: CodePitfalls.doc:2
RW_pointer supporting 'copy on write' functionality.
Definition: PtrTypes.h:459
To Solvable transform functor.
Definition: Solvable.h:562
#define for_(IT, BEG, END)
Convenient for-loops using iterator.
Definition: Easy.h:28