ArmNN
 23.08
TransformIterator.hpp
Go to the documentation of this file.
1 //
2 // Copyright © 2020,2023 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 >
22 {
23 public:
24  using iterator_category = Category;
25  using value_type = T;
26  using difference_type = Distance;
27  using pointer = Pointer;
28  using reference = Reference;
29 
30 
31  TransformIterator() = default;
32  TransformIterator(TransformIterator const& transformIterator) = default;
33  TransformIterator(TransformIterator&& transformIterator) = default;
34 
35  TransformIterator(Iterator& it, Function fn) : m_it(it), m_fn(fn) {}
36  TransformIterator(Iterator&& it, Function fn) : m_it(it), m_fn(fn) {}
37 
38  ~TransformIterator() = default;
39 
41  {
42  m_fn = rhs.m_fn;
43  m_it = rhs.m_it;
44  return *this;
45  }
46 
48  {
49  m_fn = std::move(rhs.m_fn);
50  m_it = std::move(rhs.m_it);
51  return *this;
52  }
53 
54  TransformIterator operator++() {++m_it; return *this;}
55  TransformIterator operator--() {--m_it; return *this;}
56 
57  TransformIterator operator++() const {++m_it; return *this;}
58  TransformIterator operator--() const {--m_it; return *this;}
59 
60  TransformIterator operator++(int n) const {m_it += n; return *this;}
61  TransformIterator operator--(int n) const {m_it -= n; return *this;}
62 
63  TransformIterator operator[](Distance n) const {m_it[n]; return *this;};
64 
65  Distance operator-(const TransformIterator& other) {return m_it - other.m_it;}
66 
67  TransformIterator operator-(const Distance n) {return {m_it - n, m_fn};}
68  TransformIterator operator+(const Distance n) {return {m_it + n, m_fn};}
69 
70  bool operator>(const TransformIterator& rhs) const {return m_it > rhs.m_it;}
71  bool operator<(const TransformIterator& rhs) const {return m_it < rhs.m_it;}
72  bool operator>=(const TransformIterator& rhs) const {return m_it >= rhs.m_it;}
73  bool operator<=(const TransformIterator& rhs) const {return m_it <= rhs.m_it;}
74 
75  bool operator==(TransformIterator other) const {return (m_it == other.m_it);}
76  bool operator!=(TransformIterator other) const {return !(m_it == other.m_it);}
77 
78  Reference operator*() const {return m_fn(*m_it);}
79 
80 private:
81  Iterator m_it;
82  Function m_fn;
83 };
84 
85 template<typename Function, typename Iterator>
87 {
89 }
90 
91 }
armnn::TransformIterator::reference
Reference reference
Definition: TransformIterator.hpp:28
armnn::TransformIterator::operator-
Distance operator-(const TransformIterator &other)
Definition: TransformIterator.hpp:65
armnn::TransformIterator::operator--
TransformIterator operator--(int n) const
Definition: TransformIterator.hpp:61
armnn::TransformIterator::operator=
TransformIterator & operator=(TransformIterator const &rhs)
Definition: TransformIterator.hpp:40
armnn::TransformIterator::difference_type
Distance difference_type
Definition: TransformIterator.hpp:26
armnn::TransformIterator::operator*
Reference operator*() const
Definition: TransformIterator.hpp:78
armnn::TransformIterator::~TransformIterator
~TransformIterator()=default
armnn::TransformIterator::operator<
bool operator<(const TransformIterator &rhs) const
Definition: TransformIterator.hpp:71
armnn::MakeTransformIterator
constexpr TransformIterator< Function, Iterator > MakeTransformIterator(Iterator i, Function f)
Definition: TransformIterator.hpp:86
armnn::TransformIterator::operator>=
bool operator>=(const TransformIterator &rhs) const
Definition: TransformIterator.hpp:72
armnn::TransformIterator::operator<=
bool operator<=(const TransformIterator &rhs) const
Definition: TransformIterator.hpp:73
armnn::TransformIterator::operator++
TransformIterator operator++()
Definition: TransformIterator.hpp:54
armnn::TransformIterator::operator++
TransformIterator operator++() const
Definition: TransformIterator.hpp:57
armnn::TransformIterator::operator--
TransformIterator operator--()
Definition: TransformIterator.hpp:55
armnn::TransformIterator::operator[]
TransformIterator operator[](Distance n) const
Definition: TransformIterator.hpp:63
armnn::TransformIterator::operator=
TransformIterator & operator=(TransformIterator &&rhs)
Definition: TransformIterator.hpp:47
armnn::TransformIterator::value_type
T value_type
Definition: TransformIterator.hpp:25
armnn::TransformIterator::operator>
bool operator>(const TransformIterator &rhs) const
Definition: TransformIterator.hpp:70
armnn::TransformIterator::operator--
TransformIterator operator--() const
Definition: TransformIterator.hpp:58
armnn::TransformIterator::TransformIterator
TransformIterator()=default
armnn::TransformIterator::operator++
TransformIterator operator++(int n) const
Definition: TransformIterator.hpp:60
armnn::TransformIterator::TransformIterator
TransformIterator(Iterator &it, Function fn)
Definition: TransformIterator.hpp:35
armnn::TransformIterator::TransformIterator
TransformIterator(Iterator &&it, Function fn)
Definition: TransformIterator.hpp:36
armnn::TransformIterator::operator!=
bool operator!=(TransformIterator other) const
Definition: TransformIterator.hpp:76
armnn
Copyright (c) 2021 ARM Limited and Contributors.
Definition: 01_00_quick_start.dox:6
armnn::TransformIterator::operator+
TransformIterator operator+(const Distance n)
Definition: TransformIterator.hpp:68
armnn::TransformIterator::operator==
bool operator==(TransformIterator other) const
Definition: TransformIterator.hpp:75
armnn::TransformIterator::operator-
TransformIterator operator-(const Distance n)
Definition: TransformIterator.hpp:67
armnn::TransformIterator::pointer
Pointer pointer
Definition: TransformIterator.hpp:27
armnn::TransformIterator::iterator_category
Category iterator_category
Definition: TransformIterator.hpp:24
armnn::TransformIterator
Definition: TransformIterator.hpp:21