ArmNN
 22.11
TransformIterator.hpp
Go to the documentation of this file.
1 //
2 // Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 #pragma once
6 
7 #include <iterator>
8 
9 namespace armnn
10 {
11 
12 template<typename Function,
13  typename Iterator,
14  typename Category = typename std::iterator_traits<Iterator>::iterator_category,
15  typename T = typename std::iterator_traits<Iterator>::value_type,
16  typename Distance = typename std::iterator_traits<Iterator>::difference_type,
17  typename Pointer = typename std::iterator_traits<Iterator>::pointer,
18  typename Reference =
19  typename std::result_of<const Function(typename std::iterator_traits<Iterator>::reference)>::type
20 >
21 class TransformIterator : public std::iterator<Category, T, Distance, Pointer, Reference>
22 {
23 
24 public:
25 
26  TransformIterator() = default;
27  TransformIterator(TransformIterator const& transformIterator) = default;
28  TransformIterator(TransformIterator&& transformIterator) = default;
29 
30  TransformIterator(Iterator& it, Function fn) : m_it(it), m_fn(fn) {}
31  TransformIterator(Iterator&& it, Function fn) : m_it(it), m_fn(fn) {}
32 
33  ~TransformIterator() = default;
34 
36  {
37  m_fn = rhs.m_fn;
38  m_it = rhs.m_it;
39  return *this;
40  }
41 
43  {
44  m_fn = std::move(rhs.m_fn);
45  m_it = std::move(rhs.m_it);
46  return *this;
47  }
48 
49  TransformIterator operator++() {++m_it; return *this;}
50  TransformIterator operator--() {--m_it; return *this;}
51 
52  TransformIterator operator++() const {++m_it; return *this;}
53  TransformIterator operator--() const {--m_it; return *this;}
54 
55  TransformIterator operator++(int n) const {m_it += n; return *this;}
56  TransformIterator operator--(int n) const {m_it -= n; return *this;}
57 
58  TransformIterator operator[](Distance n) const {m_it[n]; return *this;};
59 
60  Distance operator-(const TransformIterator& other) {return m_it - other.m_it;}
61 
62  TransformIterator operator-(const Distance n) {return {m_it - n, m_fn};}
63  TransformIterator operator+(const Distance n) {return {m_it + n, m_fn};}
64 
65  bool operator>(const TransformIterator& rhs) const {return m_it > rhs.m_it;}
66  bool operator<(const TransformIterator& rhs) const {return m_it < rhs.m_it;}
67  bool operator>=(const TransformIterator& rhs) const {return m_it >= rhs.m_it;}
68  bool operator<=(const TransformIterator& rhs) const {return m_it <= rhs.m_it;}
69 
70  bool operator==(TransformIterator other) const {return (m_it == other.m_it);}
71  bool operator!=(TransformIterator other) const {return !(m_it == other.m_it);}
72 
73  Reference operator*() const {return m_fn(*m_it);}
74 
75 private:
76  Iterator m_it;
77  Function m_fn;
78 };
79 
80 template<typename Function, typename Iterator>
82 {
84 }
85 
86 }
TransformIterator operator--(int n) const
TransformIterator operator+(const Distance n)
bool operator<(const TransformIterator &rhs) const
TransformIterator operator--() const
constexpr TransformIterator< Function, Iterator > MakeTransformIterator(Iterator i, Function f)
TransformIterator(Iterator &it, Function fn)
Copyright (c) 2021 ARM Limited and Contributors.
bool operator>(const TransformIterator &rhs) const
TransformIterator operator-(const Distance n)
bool operator!=(TransformIterator other) const
bool operator>=(const TransformIterator &rhs) const
bool operator==(TransformIterator other) const
TransformIterator operator++()
TransformIterator operator--()
Distance operator-(const TransformIterator &other)
TransformIterator & operator=(TransformIterator const &rhs)
TransformIterator operator++(int n) const
TransformIterator operator++() const
bool operator<=(const TransformIterator &rhs) const
TransformIterator(Iterator &&it, Function fn)
TransformIterator operator[](Distance n) const
TransformIterator & operator=(TransformIterator &&rhs)