libzypp 17.31.23
WhatProvides.h
Go to the documentation of this file.
1/*---------------------------------------------------------------------\
2| ____ _ __ __ ___ |
3| |__ / \ / / . \ . \ |
4| / / \ V /| _/ _/ |
5| / /__ | | | | | | |
6| /_____||_| |_| |_| |
7| |
8\---------------------------------------------------------------------*/
12#ifndef ZYPP_SAT_WHATPROVIDES_H
13#define ZYPP_SAT_WHATPROVIDES_H
14
15#include <iosfwd>
16#include <vector>
17
18#include <zypp/base/PtrTypes.h>
20#include <zypp/sat/Solvable.h>
22
24namespace zypp
25{
27 namespace sat
28 {
29
30 namespace detail
31 {
32 class WhatProvidesIterator;
33 }
34
36 //
37 // CLASS NAME : WhatProvides
38 //
87 class WhatProvides : public SolvIterMixin<WhatProvides,detail::WhatProvidesIterator>,
88 protected detail::PoolMember
89 {
90 public:
92 typedef unsigned size_type;
93
94 public:
97
99 explicit
100 WhatProvides( Capability cap_r );
101
103 explicit
104 WhatProvides( Capabilities caps_r );
105
107 explicit
108 WhatProvides( const CapabilitySet & caps_r );
109
110 public:
112 bool empty() const;
113
115 size_type size() const;
116
117 public:
119
121 const_iterator begin() const;
122
124 const_iterator end() const;
125
126 private:
127 class Impl;
129 };
131
133 std::ostream & operator<<( std::ostream & str, const WhatProvides & obj );
134
137 class AllPTFs : public WhatProvides
138 {
139 public:
140 AllPTFs() : WhatProvides( Capability(Solvable::ptfMasterToken.id()) ) {};
141 };
142
143 namespace detail
144 {
146 //
147 // CLASS NAME : WhatProvides::const_iterator
148 //
154 class WhatProvidesIterator : public boost::iterator_adaptor<
155 WhatProvidesIterator // Derived
156 , const detail::IdType * // Base
157 , const Solvable // Value
158 , boost::forward_traversal_tag // CategoryOrTraversal
159 , const Solvable // Reference
160 >
161 {
162 friend std::ostream & operator<<( std::ostream & str, const WhatProvidesIterator & obj );
163 public:
165 : iterator_adaptor_( 0 ), _baseRef( 0 ), _offset( 0 )
166 {}
167
171 explicit WhatProvidesIterator( const detail::IdType *const base_r, unsigned offset_r = 0 )
172 : iterator_adaptor_( base_r ), _baseRef( base_r ? &base_reference() : 0 ), _offset( offset_r )
173 {}
174
178 explicit WhatProvidesIterator( const detail::IdType *const* baseRef_r, unsigned offset_r )
179 : iterator_adaptor_( 0 ), _baseRef( baseRef_r ), _offset( offset_r )
180 {}
181
184 : iterator_adaptor_( rhs.base_reference() )
185 , _baseRef( base_reference() ? &base_reference() : rhs._baseRef )
186 , _offset( rhs._offset )
187 {}
188
191 {
192 if ( this != &rhs ) // no self assign
193 {
194 base_reference() = rhs.base_reference();
195 _baseRef = ( base_reference() ? &base_reference() : rhs._baseRef );
196 _offset = rhs._offset;
197 }
198 return *this;
199 }
200
201 private:
203
204 reference dereference() const
205 { return Solvable( getId() ); }
206#if 0
207 template <class OtherDerived, class OtherIterator, class V, class C, class R, class D>
208 bool equal( const boost::iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> & rhs ) const
209#endif
210 bool equal( const WhatProvidesIterator & rhs ) const
211 {
212 if ( ! ( getId() || rhs.getId() ) )
213 return true; // both @end
214 if ( _offset != rhs._offset )
215 return false;
216 if ( base_reference() )
217 return( base_reference() == rhs.base_reference() );
218 return( _baseRef == rhs._baseRef );
219 }
220
222 { ++_offset; }
223
225 { return _baseRef ? (*_baseRef)[_offset] : detail::noId; }
226
227 private:
229 unsigned _offset;
230 };
232 }
233
235 { return const_iterator(); }
236
238 } // namespace sat
241} // namespace zypp
243#endif // ZYPP_SAT_WHATPROVIDES_H
Container of Capability (currently read only).
Definition: Capabilities.h:36
A sat capability.
Definition: Capability.h:63
Container of packages providing ptf()
Definition: WhatProvides.h:138
Base class providing common iterator types based on a Solvable iterator.
A Solvable object within the sat Pool.
Definition: Solvable.h:54
WhatProvides implementation date.
Definition: WhatProvides.cc:42
Container of Solvable providing a Capability (read only).
Definition: WhatProvides.h:89
RW_pointer< Impl > _pimpl
Definition: WhatProvides.h:128
const_iterator end() const
Iterator pointing behind the last Solvable.
Definition: WhatProvides.h:234
bool empty() const
Whether the container is empty.
detail::WhatProvidesIterator const_iterator
Definition: WhatProvides.h:118
WhatProvides()
Default ctor.
Definition: WhatProvides.cc:94
const_iterator begin() const
Iterator pointing to the first Solvable.
size_type size() const
Number of solvables inside.
friend std::ostream & operator<<(std::ostream &str, const WhatProvidesIterator &obj)
const detail::IdType *const * _baseRef
Definition: WhatProvides.h:228
WhatProvidesIterator(const WhatProvidesIterator &rhs)
Copy-ctor required to keep _baseRef adjusted.
Definition: WhatProvides.h:183
WhatProvidesIterator(const detail::IdType *const base_r, unsigned offset_r=0)
Ctor with pointer to 1st elemment of an array.
Definition: WhatProvides.h:171
WhatProvidesIterator(const detail::IdType *const *baseRef_r, unsigned offset_r)
Ctor with pointer to pointer to 1st elemment of an array.
Definition: WhatProvides.h:178
bool equal(const WhatProvidesIterator &rhs) const
Definition: WhatProvides.h:210
WhatProvidesIterator & operator=(const WhatProvidesIterator &rhs)
Assignment operator required to keep _baseRef adjusted.
Definition: WhatProvides.h:190
String related utilities and Regular expression matching.
static const IdType noId(0)
int IdType
Generic Id type.
Definition: PoolMember.h:104
std::ostream & operator<<(std::ostream &str, const FileConflicts &obj)
Easy-to use interface to the ZYPP dependency resolver.
Definition: CodePitfalls.doc:2
std::unordered_set< Capability > CapabilitySet
Definition: Capability.h:35
Wrapper for const correct access via Smart pointer types.
Definition: PtrTypes.h:286
Backlink to the associated PoolImpl.
Definition: PoolMember.h:89