libzypp  15.21.4
Iterable.h
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
11 #ifndef ZYPP_BASE_ITERABLE_H
12 #define ZYPP_BASE_ITERABLE_H
13 
14 #include <iterator>
15 
17 namespace zypp
18 {
35  template <class TIterator>
36  class Iterable
37  {
38  public:
39  typedef size_t size_type;
40  typedef TIterator iterator_type;
41  typedef typename std::iterator_traits<iterator_type>::value_type value_type;
42  typedef typename std::iterator_traits<iterator_type>::difference_type difference_type;
43  typedef typename std::iterator_traits<iterator_type>::pointer pointer;
44  typedef typename std::iterator_traits<iterator_type>::reference reference;
45  typedef typename std::iterator_traits<iterator_type>::iterator_category iterator_category;
46 
49  {}
50 
53  : _begin( std::move(begin_r) )
54  , _end( std::move(end_r) )
55  {}
56 
58  { return _begin; }
59 
61  { return _end; }
62 
63  bool empty() const
64  { return( _begin == _end ); }
65 
66  size_type size() const
67  { size_type ret = 0; for ( iterator_type i = _begin; i != _end; ++i ) ++ret; return ret; }
68 
69  bool contains( const value_type & val_r ) const
70  { return( find( val_r ) != _end ); }
71 
72  iterator_type find( const value_type & val_r ) const
73  { iterator_type ret = _begin; for ( ; ret != _end; ++ret ) if ( *ret == val_r ) break; return ret; }
74 
75  private:
78  };
79 
81  template <class TIterator>
82  Iterable<TIterator> makeIterable( TIterator && begin_r, TIterator && end_r )
83  { return Iterable<TIterator>( std::forward<TIterator>(begin_r), std::forward<TIterator>(end_r) ); }
84 
85 } // namespace zypp
87 #endif // ZYPP_BASE_ITERABLE_H
iterator_type _begin
Definition: Iterable.h:76
bool contains(const value_type &val_r) const
Definition: Iterable.h:69
iterator_type end() const
Definition: Iterable.h:60
iterator_type find(const value_type &val_r) const
Definition: Iterable.h:72
iterator_type begin() const
Definition: Iterable.h:57
Iterable(iterator_type begin_r, iterator_type end_r)
Ctor taking the iterator pair.
Definition: Iterable.h:52
iterator_type _end
Definition: Iterable.h:77
std::iterator_traits< iterator_type >::difference_type difference_type
Definition: Iterable.h:42
TIterator iterator_type
Definition: Iterable.h:40
bool empty() const
Definition: Iterable.h:63
Iterable< TIterator > makeIterable(TIterator &&begin_r, TIterator &&end_r)
Definition: Iterable.h:82
std::iterator_traits< iterator_type >::reference reference
Definition: Iterable.h:44
std::iterator_traits< iterator_type >::iterator_category iterator_category
Definition: Iterable.h:45
std::iterator_traits< iterator_type >::value_type value_type
Definition: Iterable.h:41
size_t size_type
Definition: Iterable.h:39
size_type size() const
Definition: Iterable.h:66
Iterable()
Ctor taking the iterator pair.
Definition: Iterable.h:48
std::iterator_traits< iterator_type >::pointer pointer
Definition: Iterable.h:43