libzypp 17.38.3
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
19#include <zypp-core/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 {
45 {
46 bool operator()( const Solvable & solv_r ) const;
47
48 using Umap = std::unordered_map<sat::detail::IdType,sat::detail::SolvableIdType>;
50 : _umap( new Umap )
51 {}
53 };
54
55#if LEGACY(1735)
56 // Keep legacy version to stay binary compatible.
57 // Recompiled code will use UnifyByIdent2.
58 struct ZYPP_API UnifyByIdent
59 {
60 bool operator()( const Solvable & solv_r ) const;
61
62 using Uset = std::unordered_set<unsigned int>;
63 UnifyByIdent()
64 : _uset( new Uset )
65 {}
66 shared_ptr<Uset> _uset;
67 };
68#endif
69 } // namespace solvitermixin_detail
70
71
73 //
74 // CLASS NAME : SolvIterMixin<Derived,DerivedSolvable_iterator>
75 //
129 template <class Derived,class DerivedSolvable_iterator>
131 {
132 public:
133 using size_type = size_t;
134
135 public:
141
142 bool empty() const
143 { return( self().begin() == self().end() ); }
144
147 { size_type s = 0; for_( it, self().begin(), self().end() ) ++s; return s;}
148
150 template<class TSolv>
151 bool contains( const TSolv & solv_r ) const
152 {
153 Solvable solv( asSolvable()( solv_r ) );
154 for_( it, self().begin(), self().end() )
155 if ( *it == solv )
156 return true;
157 return false;
158 }
159
160
161 public:
164 using Solvable_iterator = DerivedSolvable_iterator;
166 { return self().begin(); }
168 { return self().end(); }
171
172
177 { return make_transform_iterator( solvableBegin(), asPoolItem() ); }
179 { return make_transform_iterator( solvableEnd(), asPoolItem() ); }
182
183
184 private:
186 public:
191 { return make_transform_iterator( unifiedSolvableBegin(), ui::asSelectable() ); }
193 { return make_transform_iterator( unifiedSolvableEnd(), ui::asSelectable() ); }
196
197
198 private:
207
208 private:
209 const Derived & self() const
210 { return *static_cast<const Derived*>( this ); }
211 protected:
214 SolvIterMixin(const SolvIterMixin &) = default;
216 SolvIterMixin(SolvIterMixin &&) noexcept = default;
217 SolvIterMixin &operator=(SolvIterMixin &&) noexcept = default;
218 };
219
220
222 } // namespace sat
225} // namespace zypp
227#endif // ZYPP_SAT_SOLVITERMIXIN_H
#define for_(IT, BEG, END)
Convenient for-loops using iterator.
Definition Easy.h:27
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...
bool operator()(const zypp::Arch &lhs, const zypp::Arch &rhs) const
Default order for std::container based Arch::compare.
Definition Arch.h:370
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
filter_iterator< solvitermixin_detail::UnifyByIdent2, Solvable_iterator > UnifiedSolvable_iterator
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
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:598
std::unordered_map< sat::detail::IdType, sat::detail::SolvableIdType > Umap
bool operator()(const Solvable &solv_r) const
Solvable to Selectable transform functor.
Definition Selectable.h:587