libzypp 17.37.17
SolvIterMixin.h
Go to the documentation of this file.
1/*---------------------------------------------------------------------\
2| ____ _ __ __ ___ |
3| |__ / \ / / . \ . \ |
4| / / \ V /| _/ _/ |
5| / /__ | | | | | | |
6| /_____||_| |_| |_| |
7| |
8\---------------------------------------------------------------------*/
12#ifndef ZYPP_SAT_SOLVITERMIXIN_H
13#define ZYPP_SAT_SOLVITERMIXIN_H
14
15#include <iosfwd>
16
17#include <zypp/base/PtrTypes.h>
18#include <zypp/base/Iterator.h>
19#include <zypp/base/Hash.h>
20
21#include <zypp/sat/Solvable.h>
22#include <zypp/PoolItem.h>
23#include <zypp/ui/Selectable.h>
24
26namespace zypp
27{
28
30 namespace sat
31 {
32
33 class Solvable;
34 //class asSolvable; // transform functor
35
36 namespace solvitermixin_detail
37 {
44 {
45 bool operator()( const Solvable & solv_r ) const;
46
47 using Uset = std::unordered_set<unsigned int>;
49 : _uset( new Uset )
50 {}
52 };
53
54
55 } // namespace solvitermixin_detail
56
57
59 //
60 // CLASS NAME : SolvIterMixin<Derived,DerivedSolvable_iterator>
61 //
115 template <class Derived,class DerivedSolvable_iterator>
117 {
118 public:
119 using size_type = size_t;
120
121 public:
127
128 bool empty() const
129 { return( self().begin() == self().end() ); }
130
133 { size_type s = 0; for_( it, self().begin(), self().end() ) ++s; return s;}
134
136 template<class TSolv>
137 bool contains( const TSolv & solv_r ) const
138 {
139 Solvable solv( asSolvable()( solv_r ) );
140 for_( it, self().begin(), self().end() )
141 if ( *it == solv )
142 return true;
143 return false;
144 }
145
146
147 public:
150 using Solvable_iterator = DerivedSolvable_iterator;
152 { return self().begin(); }
154 { return self().end(); }
157
158
163 { return make_transform_iterator( solvableBegin(), asPoolItem() ); }
165 { return make_transform_iterator( solvableEnd(), asPoolItem() ); }
168
169
170 private:
172 public:
177 { return make_transform_iterator( unifiedSolvableBegin(), ui::asSelectable() ); }
179 { return make_transform_iterator( unifiedSolvableEnd(), ui::asSelectable() ); }
182
183
184 private:
193
194 private:
195 const Derived & self() const
196 { return *static_cast<const Derived*>( this ); }
197 protected:
200 SolvIterMixin(const SolvIterMixin &) = default;
202 SolvIterMixin(SolvIterMixin &&) noexcept = default;
203 SolvIterMixin &operator=(SolvIterMixin &&) noexcept = default;
204 };
205
206
208 } // namespace sat
211} // namespace zypp
213#endif // ZYPP_SAT_SOLVITERMIXIN_H
An iterator over the subset of elements of some sequence which satisfy a given predicate.
An iterator over elements which are the result of applying some functional transformation to the elem...
Iterable< TIterator > makeIterable(TIterator &&begin_r, TIterator &&end_r)
convenient construction.
Definition Iterable.h:88
Solvable_iterator solvableBegin() const
Selectable_iterator selectableBegin() const
Iterable< Solvable_iterator > solvable() const
transform_iterator< asPoolItem, Solvable_iterator > PoolItem_iterator
bool contains(const TSolv &solv_r) const
Whether collection contains a specific Solvable.
DerivedSolvable_iterator Solvable_iterator
Iterable< UnifiedSolvable_iterator > unifiedSolvable() const
PoolItem_iterator poolItemEnd() const
Selectable_iterator selectableEnd() const
Iterable< PoolItem_iterator > poolItem() const
Solvable_iterator solvableEnd() const
SolvIterMixin(SolvIterMixin &&) noexcept=default
PoolItem_iterator poolItemBegin() const
const Derived & self() const
bool empty() const
Whether the collection is epmty.
transform_iterator< ui::asSelectable, UnifiedSolvable_iterator > Selectable_iterator
SolvIterMixin(const SolvIterMixin &)=default
SolvIterMixin & operator=(const SolvIterMixin &)=default
UnifiedSolvable_iterator unifiedSolvableBegin() const
Iterable< Selectable_iterator > selectable() const
filter_iterator< solvitermixin_detail::UnifyByIdent, Solvable_iterator > UnifiedSolvable_iterator
UnifiedSolvable_iterator unifiedSolvableEnd() const
size_type size() const
Size of the collection.
A Solvable object within the sat Pool.
Definition Solvable.h:54
Libsolv interface
Easy-to use interface to the ZYPP dependency resolver.
const Arch Arch_armv7hnl Arch_armv7nhl ZYPP_API
Definition Arch.h:247
Solvable to PoolItem transform functor.
Definition PoolItem.h:204
To Solvable transform functor.
Definition Solvable.h:579
std::unordered_set< unsigned int > Uset
bool operator()(const Solvable &solv_r) const
Solvable to Selectable transform functor.
Definition Selectable.h:587
#define for_(IT, BEG, END)
Convenient for-loops using iterator.
Definition Easy.h:27