aimstil  5.0.5
func_iterator.h
Go to the documentation of this file.
1 #ifndef FUNC_ITERATOR_H_
2 #define FUNC_ITERATOR_H_
3 
4 namespace til
5 {
6  namespace detail
7  {
8  template < typename TIterator, typename TFunctor >
9  class func_iterator_impl : public TIterator
10  {
11  public: // typedefs
12  typedef TIterator Base;
13  typedef typename TFunctor::result_type value_type;
14 
15  public: // constructors & destructor
16  func_iterator_impl() : TIterator( ), m_f( ) {}
17  explicit func_iterator_impl(const TIterator & i) : TIterator(i), m_f( ) {}
18  explicit func_iterator_impl(TFunctor f) : TIterator( ), m_f(f) {}
19  func_iterator_impl(const TIterator & i, TFunctor f) : TIterator(i), m_f(f) {}
20 
21  public: // functions
22  value_type operator*()
23  {
24  return m_f(this->Base::operator*());
25  }
26 
27  private: // data
28  TFunctor m_f;
29  };
30  }
31 
34  template < typename TContainer, typename TFunctor >
36  : public detail::func_iterator_impl<typename TContainer::iterator, TFunctor>
37  {
38  public: // typedefs
40 
41  public: // constructors & destructor
42  func_iterator() : Base() {}
43  explicit func_iterator(const typename TContainer::iterator & i) : Base(i) {}
44  explicit func_iterator(TFunctor f) : Base(f) {}
45  func_iterator(const typename TContainer::iterator & i, TFunctor f) : Base(i,f) {}
46  };
47 
48 
51  template < typename TContainer, typename TFunctor >
53  : public detail::func_iterator_impl<typename TContainer::const_iterator, TFunctor>
54  {
55  public: // typedefs
57 
58  public: // constructors & destructor
59  const_func_iterator() : Base() {}
60  explicit const_func_iterator(const typename TContainer::const_iterator & i) : Base(i) {}
61  explicit const_func_iterator(TFunctor f) : Base(f) {}
62  const_func_iterator(const typename TContainer::const_iterator & i, TFunctor f) : Base(i, f) {}
63  };
64 
65 
66  template < typename TFunctor, typename TIterator >
68  func_it(TIterator it, TFunctor f = TFunctor())
69  {
71  }
72 
73 
78  template < typename TContainer, typename TFunctor >
79  class func_container : public TContainer
80  {
81  public: // typedefs
82 
83  typedef TContainer Base;
84 
85  typedef typename TFunctor::result_type value_type;
88 
89  public: // constructors & destructor
90  func_container(TContainer & c) : m_c(c), m_f() {}
91 
92  public: // functions
93 
94  iterator begin() { return iterator(this->Base::begin(), m_f); }
95  iterator end() { return iterator(this->Base::end(), m_f); }
96  const_iterator begin() const { return const_iterator(this->Base::begin(), m_f); }
97  const_iterator end() const { return const_iterator(this->Base::end(), m_f); }
98 
99  value_type operator[](int i) { return m_f(this->Base::operator[](i)); }
100 
101  private: // data
102 
103  TContainer & m_c;
104  TFunctor m_f;
105  };
106 
107 } // namespace til
108 
109 #endif /*FUNC_ITERATOR_H_*/
TFunctor::result_type value_type
Definition: func_iterator.h:13
const_func_iterator(const typename TContainer::const_iterator &i, TFunctor f)
Definition: func_iterator.h:62
A functor iterator is an iterator that overload the operator* to a call to a functor on the pointed v...
Definition: func_iterator.h:35
Belongs to package Box Do not include directly, include til/Box.h instead.
Definition: Accumulator.h:10
const_func_iterator(const typename TContainer::const_iterator &i)
Definition: func_iterator.h:60
const_func_iterator(TFunctor f)
Definition: func_iterator.h:61
const_iterator end() const
Definition: func_iterator.h:97
detail::func_iterator_impl< typename TContainer::iterator, TFunctor > Base
Definition: func_iterator.h:39
func_iterator_impl(const TIterator &i)
Definition: func_iterator.h:17
const_func_iterator< TContainer, TFunctor > const_iterator
Definition: func_iterator.h:87
func_iterator< TContainer, TFunctor > iterator
Definition: func_iterator.h:86
const_iterator begin() const
Definition: func_iterator.h:96
func_iterator(const typename TContainer::iterator &i)
Definition: func_iterator.h:43
value_type operator[](int i)
Definition: func_iterator.h:99
func_iterator(const typename TContainer::iterator &i, TFunctor f)
Definition: func_iterator.h:45
func_iterator(TFunctor f)
Definition: func_iterator.h:44
func_container(TContainer &c)
Definition: func_iterator.h:90
TFunctor::result_type value_type
Definition: func_iterator.h:85
func_iterator_impl(const TIterator &i, TFunctor f)
Definition: func_iterator.h:19
detail::func_iterator_impl< TIterator, TFunctor > func_it(TIterator it, TFunctor f=TFunctor())
Definition: func_iterator.h:68
A functor iterator is an iterator that overload the operator* to a call to a functor on the pointed v...
Definition: func_iterator.h:52
A wrapper on stl containers that returns func iterators.
Definition: func_iterator.h:79
detail::func_iterator_impl< typename TContainer::const_iterator, TFunctor > Base
Definition: func_iterator.h:56