libzypp  11.13.5
LookupAttrTools.h
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
12 #ifndef ZYPP_SAT_LOOKUPATTRTOOLS_H
13 #define ZYPP_SAT_LOOKUPATTRTOOLS_H
14 
15 #include "zypp/sat/LookupAttr.h"
16 #include "zypp/Repository.h"
17 
19 namespace zypp
20 {
21 
22  namespace sat
23  {
24 
26  //
27  // CLASS NAME : LookupAttr::transformIterator
28  //
55  template<class _ResultT, class _AttrT>
56  class LookupAttr::transformIterator : public boost::iterator_adaptor<
57  transformIterator<_ResultT,_AttrT> // Derived
58  , LookupAttr::iterator // Base
59  , _ResultT // Value
60  , boost::forward_traversal_tag // CategoryOrTraversal
61  , _ResultT // Reference
62  >
63  {
64  public:
66  {}
67 
68  explicit
70  { this->base_reference() = val_r; }
71 
72  public:
73 
78  { this->base_reference().nextSkipSolvAttr(); }
79 
82  { this->base_reference().nextSkipSolvable(); }
83 
85  void nextSkipRepo()
86  { this->base_reference().nextSkipRepo(); }
87 
89  void skipSolvAttr()
90  { this->base_reference().skipSolvAttr(); }
91 
93  void skipSolvable()
94  { this->base_reference().skipSolvable(); }
95 
97  void skipRepo()
98  { this->base_reference().skipRepo(); }
100 
105  { return this->base_reference().inRepo(); }
106 
109  { return this->base_reference().inSolvable(); }
110 
113  { return this->base_reference().inSolvAttr(); }
115 
116  private:
118 
119  _ResultT dereference() const
120  {
121  const LookupAttr::iterator lit( this->base_reference() );
122  return _ResultT( lit.asType<_AttrT>() );
123  }
124  };
126 
127  template<class _ResultT, class _AttrT>
128  class ArrayAttr;
129 
130  template<class _ResultT, class _AttrT>
131  std::ostream & operator<<( std::ostream & str, const ArrayAttr<_ResultT,_AttrT> & obj );
132 
134  //
135  // CLASS NAME : ArrayAttr
136  //
153  template<class _ResultT, class _AttrT>
154  class ArrayAttr
155  {
156  friend std::ostream & operator<< <_ResultT,_AttrT>( std::ostream & str, const ArrayAttr<_ResultT,_AttrT> & obj );
157 
158  public:
160  {}
161 
163  : _q( attr_r, loc_r )
164  {}
165 
167  : _q( attr_r, repo_r, loc_r )
168  {}
169 
170  ArrayAttr( SolvAttr attr_r, Solvable solv_r )
171  : _q( attr_r, solv_r )
172  {}
173 
174  public:
177 
178  iterator begin() const
179  { return iterator( _q.begin() ); }
180 
181  iterator end() const
182  { return iterator( _q.end() ); }
183 
184  bool empty() const
185  { return _q.empty(); }
186 
187  size_type size() const
188  {
189  size_type count = 0;
190  for_( it, begin(), end() )
191  ++count;
192  return count;
193  }
194 
195  public:
196 
197  iterator find( const _ResultT & key_r ) const
198  {
199  for_( it, begin(), end() )
200  {
201  if ( *it == key_r )
202  return it;
203  }
204  return end();
205  }
206 
207  private:
209  };
211 
213  template<class _ResultT, class _AttrT>
214  inline std::ostream & operator<<( std::ostream & str, const ArrayAttr<_ResultT,_AttrT> & obj )
215  { return dumpOn( str, obj._q ); }
216 
218  } // namespace sat
221 } // namespace zypp
223 #endif // ZYPP_SAT_LOOKUPATTRTOOLS_H