libzypp  15.28.6
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  private:
79  };
81 
83  std::ostream & operator<<( std::ostream & str, const Capabilities & obj );
84 
86  //
87  // CLASS NAME : Capabilities::const_iterator
88  //
91  class Capabilities::const_iterator : public boost::iterator_adaptor<
92  const_iterator // Derived
93  , const sat::detail::IdType * // Base
94  , const Capability // Value
95  , boost::forward_traversal_tag // CategoryOrTraversal
96  , const Capability // Reference
97  >
98  {
99  public:
101  : const_iterator::iterator_adaptor_( 0 )
102  {}
103 
104  explicit const_iterator( const sat::detail::IdType * _idx )
105  : const_iterator::iterator_adaptor_( _idx )
106  {
107  if ( base_reference() && sat::detail::isDepMarkerId( *base_reference() ) )
108  {
109  _tagged = true;
110  ++base_reference();
111  }
112  }
113 
114  public:
132  bool tagged() const { return _tagged; }
133 
134  private:
136 
137  reference dereference() const
138  { return ( base() ) ? Capability( *base() ) : Capability::Null; }
139 
140  template <class OtherDerived, class OtherIterator, class V, class C, class R, class D>
141  bool equal( const boost::iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> & rhs ) const
142  { // NULL pointer is eqal pointer to Id 0
143  return ( base() == rhs.base() // includes both NULL...
144  || ( !rhs.base() && !*base() )
145  || ( !base() && !*rhs.base() ) );
146  }
147 
148  void increment()
149  { // jump over libsolvs internal ids.
150  if ( sat::detail::isDepMarkerId( *(++base_reference()) ) )
151  {
152  _tagged = true;
153  ++base_reference();
154  }
155  }
156 
157  private:
159  };
161 
163  { return const_iterator( _begin ); }
164 
166  { return const_iterator( 0 ); }
167 
169 } // namespace zypp
171 #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:130
Container of Capability (currently read only).
Definition: Capabilities.h:35
bool empty() const
Whether the container is empty.
Definition: Capabilities.h:62
bool equal(const boost::iterator_adaptor< OtherDerived, OtherIterator, V, C, R, D > &rhs) const
Definition: Capabilities.h:141
bool tagged() const
Return true if the Capability is tagged.
Definition: Capabilities.h:132
const_iterator(const sat::detail::IdType *_idx)
Definition: Capabilities.h:104
Capability value_type
Definition: Capabilities.h:38
std::ostream & operator<<(std::ostream &str, const Exception &obj)
Definition: Exception.cc:120
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:145
const_iterator end() const
Iterator pointing behind the last Capability.
Definition: Capabilities.h:165
const sat::detail::IdType * _begin
Definition: Capabilities.h:78
A sat capability.
Definition: Capability.h:59
Capabilities iterator.
Definition: Capabilities.h:91
size_type size() const
Number of capabilities inside.
Definition: Capabilities.cc:45
friend class boost::iterator_core_access
Definition: Capabilities.h:135
const_iterator begin() const
Iterator pointing to the first Capability.
Definition: Capabilities.h:162
DefaultIntegral< bool, false > _tagged
Definition: Capabilities.h:158