diff options
author | Finn Williams <Finn.Williams@arm.com> | 2020-10-22 16:53:35 +0100 |
---|---|---|
committer | Finn Williams <Finn.Williams@arm.com> | 2020-10-28 14:37:30 +0000 |
commit | 3e54d03115bc502aa85a346d68f50712ece10620 (patch) | |
tree | 40af2c15da48c33a16ddd4f45c01ff12d2577a88 /include/armnn | |
parent | aaa54ae75100ddb5520698034f76d341bb036c99 (diff) | |
download | armnn-3e54d03115bc502aa85a346d68f50712ece10620.tar.gz |
IVGCVSW-5433 Remove boost::transform_iterator and make_transform_iterator
Signed-off-by: Finn Williams <Finn.Williams@arm.com>
Change-Id: I28aace7092cff5743353df1b1de8e7a4691554d3
Diffstat (limited to 'include/armnn')
-rw-r--r-- | include/armnn/utility/TransformIterator.hpp | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/include/armnn/utility/TransformIterator.hpp b/include/armnn/utility/TransformIterator.hpp new file mode 100644 index 0000000000..d4f32c5d8a --- /dev/null +++ b/include/armnn/utility/TransformIterator.hpp @@ -0,0 +1,82 @@ +// +// Copyright © 2020 Arm Ltd and Contributors. All rights reserved. +// SPDX-License-Identifier: MIT +// +#pragma once + +#include <iterator> + +namespace armnn +{ + +template<typename Function, + typename Iterator, + typename Category = typename std::iterator_traits<Iterator>::iterator_category, + typename T = typename std::iterator_traits<Iterator>::value_type, + typename Distance = typename std::iterator_traits<Iterator>::difference_type, + typename Pointer = typename std::iterator_traits<Iterator>::pointer, + typename Reference = + typename std::result_of<const Function(typename std::iterator_traits<Iterator>::reference)>::type +> +class TransformIterator : public std::iterator<Category, T, Distance, Pointer, Reference> +{ + +public: + + TransformIterator() = default; + TransformIterator(TransformIterator const& transformIterator) = default; + TransformIterator(TransformIterator&& transformIterator) = default; + + TransformIterator(Iterator& it, Function fn) : m_it(it), m_fn(fn) {} + TransformIterator(Iterator&& it, Function fn) : m_it(it), m_fn(fn) {} + + ~TransformIterator() = default; + + TransformIterator operator=(TransformIterator const& transformIterator) + { + return{ transformIterator.it, transformIterator.fn}; + } + + TransformIterator operator=(TransformIterator&& transformIterator) + { + return{ transformIterator.it, transformIterator.fn}; + } + + TransformIterator operator++() {++m_it; return *this;} + TransformIterator operator--() {--m_it; return *this;} + + TransformIterator operator++() const {++m_it; return *this;} + TransformIterator operator--() const {--m_it; return *this;} + + TransformIterator operator++(int n) const {m_it += n; return *this;} + TransformIterator operator--(int n) const {m_it -= n; return *this;} + + TransformIterator operator[](Distance n) const {m_it[n]; return *this;}; + + Distance operator-(const TransformIterator& other) {return m_it - other.m_it;} + + TransformIterator operator-(const Distance n) {return {m_it - n, m_fn};} + TransformIterator operator+(const Distance n) {return {m_it + n, m_fn};} + + bool operator>(const TransformIterator& rhs) const {return m_it > rhs.m_it;} + bool operator<(const TransformIterator& rhs) const {return m_it < rhs.m_it;} + bool operator>=(const TransformIterator& rhs) const {return m_it >= rhs.m_it;} + bool operator<=(const TransformIterator& rhs) const {return m_it <= rhs.m_it;} + + bool operator==(TransformIterator other) const {return (m_it == other.m_it);} + bool operator!=(TransformIterator other) const {return !(m_it == other.m_it);} + + Reference operator*() const {return m_fn(*m_it);} + +private: + Iterator m_it; + const Function m_fn; +}; + +template<typename Function, typename Iterator> +constexpr TransformIterator<Function, Iterator> MakeTransformIterator(Iterator i, Function f) +{ + return TransformIterator<Function, Iterator>(i, f); +} + +}
\ No newline at end of file |