libzypp 17.31.6
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
135 namespace detail
136 {
138 //
139 // CLASS NAME : WhatProvides::const_iterator
140 //
146 class WhatProvidesIterator : public boost::iterator_adaptor<
147 WhatProvidesIterator // Derived
148 , const detail::IdType * // Base
149 , const Solvable // Value
150 , boost::forward_traversal_tag // CategoryOrTraversal
151 , const Solvable // Reference
152 >
153 {
154 friend std::ostream & operator<<( std::ostream & str, const WhatProvidesIterator & obj );
155 public:
157 : iterator_adaptor_( 0 ), _baseRef( 0 ), _offset( 0 )
158 {}
159
163 explicit WhatProvidesIterator( const detail::IdType *const base_r, unsigned offset_r = 0 )
164 : iterator_adaptor_( base_r ), _baseRef( base_r ? &base_reference() : 0 ), _offset( offset_r )
165 {}
166
170 explicit WhatProvidesIterator( const detail::IdType *const* baseRef_r, unsigned offset_r )
171 : iterator_adaptor_( 0 ), _baseRef( baseRef_r ), _offset( offset_r )
172 {}
173
176 : iterator_adaptor_( rhs.base_reference() )
177 , _baseRef( base_reference() ? &base_reference() : rhs._baseRef )
178 , _offset( rhs._offset )
179 {}
180
183 {
184 if ( this != &rhs ) // no self assign
185 {
186 base_reference() = rhs.base_reference();
187 _baseRef = ( base_reference() ? &base_reference() : rhs._baseRef );
188 _offset = rhs._offset;
189 }
190 return *this;
191 }
192
193 private:
195
196 reference dereference() const
197 { return Solvable( getId() ); }
198#if 0
199 template <class OtherDerived, class OtherIterator, class V, class C, class R, class D>
200 bool equal( const boost::iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> & rhs ) const
201#endif
202 bool equal( const WhatProvidesIterator & rhs ) const
203 {
204 if ( ! ( getId() || rhs.getId() ) )
205 return true; // both @end
206 if ( _offset != rhs._offset )
207 return false;
208 if ( base_reference() )
209 return( base_reference() == rhs.base_reference() );
210 return( _baseRef == rhs._baseRef );
211 }
212
214 { ++_offset; }
215
217 { return _baseRef ? (*_baseRef)[_offset] : detail::noId; }
218
219 private:
221 unsigned _offset;
222 };
224 }
225
227 { return const_iterator(); }
228
230 } // namespace sat
233} // namespace zypp
235#endif // ZYPP_SAT_WHATPROVIDES_H
Container of Capability (currently read only).
Definition: Capabilities.h:36
A sat capability.
Definition: Capability.h:60
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:127
const_iterator end() const
Iterator pointing behind the last Solvable.
Definition: WhatProvides.h:226
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:220
WhatProvidesIterator(const WhatProvidesIterator &rhs)
Copy-ctor required to keep _baseRef adjusted.
Definition: WhatProvides.h:175
WhatProvidesIterator(const detail::IdType *const base_r, unsigned offset_r=0)
Ctor with pointer to 1st elemment of an array.
Definition: WhatProvides.h:163
WhatProvidesIterator(const detail::IdType *const *baseRef_r, unsigned offset_r)
Ctor with pointer to pointer to 1st elemment of an array.
Definition: WhatProvides.h:170
bool equal(const WhatProvidesIterator &rhs) const
Definition: WhatProvides.h:202
WhatProvidesIterator & operator=(const WhatProvidesIterator &rhs)
Assignment operator required to keep _baseRef adjusted.
Definition: WhatProvides.h:182
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:33
Wrapper for const correct access via Smart pointer types.
Definition: PtrTypes.h:286
Backlink to the associated PoolImpl.
Definition: PoolMember.h:89