NGen
Loading...
Searching...
No Matches
iterator.hpp
1#ifndef NGEN_MDARRAY_ITERATOR_HPP
2#define NGEN_MDARRAY_ITERATOR_HPP
3
4#include "mdarray.hpp"
5
6namespace ngen {
7
8template<typename T>
9struct mdarray<T>::iterator
10{
11 using iterator_category = std::random_access_iterator_tag;
12 using difference_type = std::ptrdiff_t;
17
18 iterator(const mdarray& ref, size_type idx)
19 : m_ref(ref)
20 , m_idx(idx){};
21
23 {
24 return this->m_ref.m_data.at(this->m_idx);
25 }
26
28 {
29 return &this->m_ref.m_data.at(this->m_idx);
30 }
31
33 {
34 this->m_idx++;
35 return *this;
36 }
37
39 {
40 iterator tmp = *this;
41 ++(*this);
42 return tmp;
43 }
44
46 {
47 this->m_idx--;
48 return *this;
49 }
50
52 {
53 iterator tmp = *this;
54 --(*this);
55 return tmp;
56 }
57
58 void mdindex(boost::span<size_type> n) const noexcept
59 {
60 return this->m_ref.deindex(this->m_idx, n);
61 }
62
63 friend bool operator==(const iterator& a, const iterator& b)
64 {
65 return (&a.m_ref == &b.m_ref) &&
66 (a.m_idx == b.m_idx);
67 }
68
69 friend bool operator!=(const iterator& a, const iterator& b)
70 {
71 return !(a == b);
72 }
73
74 private:
75 const mdarray& m_ref;
77
78};
79
80}
81
82#endif // NGEN_MDARRAY_ITERATOR_HPP
Definition mdarray.hpp:13
typename container_type::size_type size_type
Definition mdarray.hpp:17
typename container_type::reference reference
Definition mdarray.hpp:19
typename container_type::const_reference const_reference
Definition mdarray.hpp:20
typename container_type::pointer pointer
Definition mdarray.hpp:21
T value_type
Definition mdarray.hpp:15
Definition DomainLayer.hpp:9
Definition iterator.hpp:10
pointer operator->()
Definition iterator.hpp:27
const_reference operator*() const
Definition iterator.hpp:22
std::ptrdiff_t difference_type
Definition iterator.hpp:12
friend bool operator!=(const iterator &a, const iterator &b)
Definition iterator.hpp:69
mdarray::value_type value_type
Definition iterator.hpp:13
mdarray::pointer pointer
Definition iterator.hpp:14
mdarray::reference reference
Definition iterator.hpp:15
iterator operator--(int)
Definition iterator.hpp:51
iterator operator++(int)
Definition iterator.hpp:38
iterator & operator--()
Definition iterator.hpp:45
friend bool operator==(const iterator &a, const iterator &b)
Definition iterator.hpp:63
iterator(const mdarray &ref, size_type idx)
Definition iterator.hpp:18
mdarray::const_reference const_reference
Definition iterator.hpp:16
std::random_access_iterator_tag iterator_category
Definition iterator.hpp:11
void mdindex(boost::span< size_type > n) const noexcept
Definition iterator.hpp:58
size_type m_idx
Definition iterator.hpp:76
iterator & operator++()
Definition iterator.hpp:32
const mdarray & m_ref
Definition iterator.hpp:75