libzypp  17.24.1
Capabilities.h
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
12 #ifndef ZYPP_SAT_CAPABILITIES_H
13 #define ZYPP_SAT_CAPABILITIES_H
14 
15 #include <iosfwd>
16 
19 #include <zypp/Capability.h>
20 
22 namespace zypp
23 {
24 
26  //
27  // CLASS NAME : Capabilities
28  //
36  {
37  public:
39  typedef unsigned size_type;
40 
42 
43  public:
46  : _begin( 0 )
47  {}
48 
50  explicit
52  : _begin( base_r )
53  {}
54 
58  Capabilities( const sat::detail::IdType * base_r, sat::detail::IdType skip_r );
59 
60  public:
62  bool empty() const
63  { return ! ( _begin && *_begin ); }
64 
66  size_type size() const;
67 
68  public:
69  class const_iterator;
70 
72  const_iterator begin() const;
73 
75  const_iterator end() const;
76 
77  public:
79  bool contains( const Capability & lhs ) const;
80 
82  bool matches( const Capability & lhs ) const;
83 
84  private:
86  };
88 
90  std::ostream & operator<<( std::ostream & str, const Capabilities & obj );
91 
93  //
94  // CLASS NAME : Capabilities::const_iterator
95  //
98  class Capabilities::const_iterator : public boost::iterator_adaptor<
99  const_iterator // Derived
100  , const sat::detail::IdType * // Base
101  , const Capability // Value
102  , boost::forward_traversal_tag // CategoryOrTraversal
103  , const Capability // Reference
104  >
105  {
106  public:
108  : const_iterator::iterator_adaptor_( 0 )
109  {}
110 
111  explicit const_iterator( const sat::detail::IdType * _idx )
112  : const_iterator::iterator_adaptor_( _idx )
113  {
114  if ( base_reference() && sat::detail::isDepMarkerId( *base_reference() ) )
115  {
116  _tagged = true;
117  ++base_reference();
118  }
119  }
120 
121  public:
139  bool tagged() const { return _tagged; }
140 
141  private:
143 
144  reference dereference() const
145  { return ( base() ) ? Capability( *base() ) : Capability::Null; }
146 
147  template <class OtherDerived, class OtherIterator, class V, class C, class R, class D>
148  bool equal( const boost::iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> & rhs ) const
149  { // NULL pointer is eqal pointer to Id 0
150  return ( base() == rhs.base() // includes both NULL...
151  || ( !rhs.base() && !*base() )
152  || ( !base() && !*rhs.base() ) );
153  }
154 
155  void increment()
156  { // jump over libsolvs internal ids.
157  if ( sat::detail::isDepMarkerId( *(++base_reference()) ) )
158  {
159  _tagged = true;
160  ++base_reference();
161  }
162  }
163 
164  private:
166  };
168 
170  { return const_iterator( _begin ); }
171 
173  { return const_iterator( 0 ); }
174 
175  inline bool Capabilities::contains( const Capability & lhs ) const
176  {
177  for ( const Capability & rhs : *this )
178  if ( lhs == rhs )
179  return true;
180  return false;
181  }
182 
183  inline bool Capabilities::matches( const Capability & lhs ) const
184  {
185  for ( const Capability & rhs : *this )
186  if ( lhs.matches( rhs ) == CapMatch::yes )
187  return true;
188  return false;
189  }
191 } // namespace zypp
193 #endif // ZYPP_SAT_CAPABILITIES_H
Capabilities(const sat::detail::IdType *base_r)
Ctor from Id pointer (friend Solvable).
Definition: Capabilities.h:51
int IdType
Generic Id type.
Definition: PoolMember.h:104
Container of Capability (currently read only).
Definition: Capabilities.h:35
const_iterator end() const
Iterator pointing behind the last Capability.
Definition: Capabilities.h:172
bool contains(const Capability &lhs) const
Return whether the set contains lhs (the Id)
Definition: Capabilities.h:175
String related utilities and Regular expression matching.
const_iterator(const sat::detail::IdType *_idx)
Definition: Capabilities.h:111
size_type size() const
Number of capabilities inside.
Definition: Capabilities.cc:45
const_iterator begin() const
Iterator pointing to the first Capability.
Definition: Capabilities.h:169
Capability value_type
Definition: Capabilities.h:38
std::ostream & operator<<(std::ostream &str, const Exception &obj)
Definition: Exception.cc:147
Capabilities()
Default ctor.
Definition: Capabilities.h:45
static const Capability Null
No or Null Capability ( Id 0 ).
Definition: Capability.h:137
bool isDepMarkerId(IdType id_r)
Test for internal ids satlib includes in dependencies.
Definition: PoolMember.h:119
bool equal(const boost::iterator_adaptor< OtherDerived, OtherIterator, V, C, R, D > &rhs) const
Definition: Capabilities.h:148
bool tagged() const
Return true if the Capability is tagged.
Definition: Capabilities.h:139
const sat::detail::IdType * _begin
Definition: Capabilities.h:85
A sat capability.
Definition: Capability.h:59
Capabilities iterator.
Definition: Capabilities.h:98
friend class boost::iterator_core_access
Definition: Capabilities.h:142
static const CapMatch yes
Definition: CapMatch.h:51
Easy-to use interface to the ZYPP dependency resolver.
Definition: CodePitfalls.doc:1
bool matches(const Capability &lhs) const
Return whether lhs matches at least one capability in set.
Definition: Capabilities.h:183
bool empty() const
Whether the container is empty.
Definition: Capabilities.h:62
static CapMatch matches(const Capability &lhs, const Capability &rhs)
Definition: Capability.h:176
DefaultIntegral< bool, false > _tagged
Definition: Capabilities.h:165