libzypp  17.31.31
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>
21 #include <zypp/sat/SolvIterMixin.h>
22 
24 namespace zypp
25 {
26  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:
96  WhatProvides();
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 
221  void increment()
222  { ++_offset; }
223 
225  { return _baseRef ? (*_baseRef)[_offset] : detail::noId; }
226 
227  private:
228  const detail::IdType *const* _baseRef;
229  unsigned _offset;
230  };
232  }
233 
235  { return const_iterator(); }
236 
238  } // namespace sat
241 } // namespace zypp
243 #endif // ZYPP_SAT_WHATPROVIDES_H
const detail::IdType *const * _baseRef
Definition: WhatProvides.h:228
int IdType
Generic Id type.
Definition: PoolMember.h:104
A Solvable object within the sat Pool.
Definition: Solvable.h:53
Container of Solvable providing a Capability (read only).
Definition: WhatProvides.h:87
Container of Capability (currently read only).
Definition: Capabilities.h:35
friend std::ostream & operator<<(std::ostream &str, const WhatProvidesIterator &obj)
detail::WhatProvidesIterator const_iterator
Definition: WhatProvides.h:118
bool empty() const
Whether the container is empty.
WhatProvidesIterator & operator=(const WhatProvidesIterator &rhs)
Assignment operator required to keep _baseRef adjusted.
Definition: WhatProvides.h:190
std::ostream & operator<<(std::ostream &str, const FileConflicts &obj)
String related utilities and Regular expression matching.
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
Base class providing common iterator types based on a Solvable iterator.
Backlink to the associated PoolImpl.
Definition: PoolMember.h:88
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 WhatProvidesIterator &rhs)
Copy-ctor required to keep _baseRef adjusted.
Definition: WhatProvides.h:183
WhatProvides implementation date.
Definition: WhatProvides.cc:41
WhatProvides()
Default ctor.
Definition: WhatProvides.cc:94
std::unordered_set< Capability > CapabilitySet
Definition: Capability.h:33
size_type size() const
Number of solvables inside.
A sat capability.
Definition: Capability.h:62
static const IdType noId(0)
bool equal(const WhatProvidesIterator &rhs) const
Definition: WhatProvides.h:210
const_iterator begin() const
Iterator pointing to the first Solvable.
Easy-to use interface to the ZYPP dependency resolver.
Definition: CodePitfalls.doc:1
Container of packages providing ptf()
Definition: WhatProvides.h:137
const_iterator end() const
Iterator pointing behind the last Solvable.
Definition: WhatProvides.h:234
RW_pointer< Impl > _pimpl
Definition: WhatProvides.h:127