libzypp  13.10.6
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  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
LookupAttr::size_type size_type
A Solvable object within the sat Pool.
Definition: Solvable.h:55
void nextSkipSolvable()
On the next call to operator++ advance to the next Solvable.
Repository inRepo() const
The current Repository.
Solvable inSolvable() const
The current Solvabele.
void skipRepo()
Immediately advance to the next Repository.
void skipSolvAttr()
Immediately advance to the next SolvAttr.
iterator find(const _ResultT &key_r) const
SolvAttr inSolvAttr() const
The current SolvAttr.
Lightweight attribute value lookup.
Definition: LookupAttr.h:111
TransformIterator returning an iterator vaue of type _ResultT.
Definition: LookupAttr.h:165
transformIterator(const LookupAttr::iterator &val_r)
#define for_(IT, BEG, END)
Convenient for-loops using iterator.
Definition: Easy.h:27
Search for solvable attributes (default)
Definition: LookupAttr.h:121
LookupAttr::transformIterator based container to retrieve list attributes.
Definition: LookupAttr.h:595
ArrayAttr(SolvAttr attr_r, Solvable solv_r)
ArrayAttr(SolvAttr attr_r, LookupAttr::Location loc_r=LookupAttr::SOLV_ATTR)
_Tp asType() const
Templated return type.
Definition: LookupAttr.h:531
LookupAttr::transformIterator< _ResultT, _AttrT > iterator
ArrayAttr(SolvAttr attr_r, Repository repo_r, LookupAttr::Location loc_r=LookupAttr::SOLV_ATTR)
iterator end() const
Solvable attribute keys.
Definition: SolvAttr.h:40
void nextSkipRepo()
On the next call to operator++ advance to the next Repository.
iterator end() const
Iterator behind the end of query results.
Definition: LookupAttr.cc:239
void nextSkipSolvAttr()
On the next call to operator++ advance to the next SolvAttr.
std::ostream & dumpOn(std::ostream &str, const LocaleSupport &obj)
bool empty() const
Whether the query is empty.
Definition: LookupAttr.cc:242
iterator begin() const
size_type size() const
void skipSolvable()
Immediately advance to the next Solvable.
Location
Specify the where to look for the attribule.
Definition: LookupAttr.h:120
iterator begin() const
Iterator to the begin of query results.
Definition: LookupAttr.cc:236