ArmNN
 25.11
Loading...
Searching...
No Matches
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
9namespace armnn
10{
11template<typename Function,
12 typename Iterator,
13 typename Category = typename std::iterator_traits<Iterator>::iterator_category,
14 typename T = typename std::iterator_traits<Iterator>::value_type,
15 typename Distance = typename std::iterator_traits<Iterator>::difference_type,
16 typename Pointer = typename std::iterator_traits<Iterator>::pointer,
17#if __cplusplus < 201703
18 typename Reference =
19 typename std::result_of<const Function(typename std::iterator_traits<Iterator>::reference)>::type
20#else
21 typename Reference =
22 typename std::invoke_result<const Function, typename std::iterator_traits<Iterator>::reference>::type
23#endif
24>
26{
27public:
28 using iterator_category = Category;
29 using value_type = T;
30 using difference_type = Distance;
31 using pointer = Pointer;
32 using reference = Reference;
33
34
35 TransformIterator() = default;
36 TransformIterator(TransformIterator const& transformIterator) = default;
37 TransformIterator(TransformIterator&& transformIterator) = default;
38
39 TransformIterator(Iterator& it, Function fn) : m_it(it), m_fn(fn) {}
40 TransformIterator(Iterator&& it, Function fn) : m_it(it), m_fn(fn) {}
41
42 ~TransformIterator() = default;
43
45 {
46 m_fn = rhs.m_fn;
47 m_it = rhs.m_it;
48 return *this;
49 }
50
52 {
53 m_fn = std::move(rhs.m_fn);
54 m_it = std::move(rhs.m_it);
55 return *this;
56 }
57
58 TransformIterator operator++() {++m_it; return *this;}
59 TransformIterator operator--() {--m_it; return *this;}
60
61 TransformIterator operator++() const {++m_it; return *this;}
62 TransformIterator operator--() const {--m_it; return *this;}
63
64 TransformIterator operator++(int n) const {m_it += n; return *this;}
65 TransformIterator operator--(int n) const {m_it -= n; return *this;}
66
67 TransformIterator operator[](Distance n) const {m_it[n]; return *this;};
68
69 Distance operator-(const TransformIterator& other) {return m_it - other.m_it;}
70
71 TransformIterator operator-(const Distance n) {return {m_it - n, m_fn};}
72 TransformIterator operator+(const Distance n) {return {m_it + n, m_fn};}
73
74 bool operator>(const TransformIterator& rhs) const {return m_it > rhs.m_it;}
75 bool operator<(const TransformIterator& rhs) const {return m_it < rhs.m_it;}
76 bool operator>=(const TransformIterator& rhs) const {return m_it >= rhs.m_it;}
77 bool operator<=(const TransformIterator& rhs) const {return m_it <= rhs.m_it;}
78
79 bool operator==(TransformIterator other) const {return (m_it == other.m_it);}
80 bool operator!=(TransformIterator other) const {return (m_it != other.m_it);}
81
82 Reference operator*() const {return m_fn(*m_it);}
83
84private:
85 Iterator m_it;
86 Function m_fn;
87};
88
89template<typename Function, typename Iterator>
94
95}
TransformIterator operator--()
TransformIterator operator++()
TransformIterator operator--(int n) const
TransformIterator(Iterator &it, Function fn)
TransformIterator operator++(int n) const
TransformIterator operator++() const
bool operator<=(const TransformIterator &rhs) const
TransformIterator(TransformIterator const &transformIterator)=default
bool operator!=(TransformIterator other) const
TransformIterator(TransformIterator &&transformIterator)=default
bool operator>=(const TransformIterator &rhs) const
TransformIterator(Iterator &&it, Function fn)
TransformIterator operator[](Distance n) const
TransformIterator operator--() const
TransformIterator operator+(const Distance n)
bool operator==(TransformIterator other) const
TransformIterator & operator=(TransformIterator &&rhs)
TransformIterator operator-(const Distance n)
TransformIterator & operator=(TransformIterator const &rhs)
bool operator<(const TransformIterator &rhs) const
Distance operator-(const TransformIterator &other)
bool operator>(const TransformIterator &rhs) const
Copyright (c) 2021 ARM Limited and Contributors.
constexpr TransformIterator< Function, Iterator > MakeTransformIterator(Iterator i, Function f)