ESyS-Particle  2.3.4
nts_iter.hpp
Go to the documentation of this file.
1 // //
3 // Copyright (c) 2003-2017 by The University of Queensland //
4 // Centre for Geoscience Computing //
5 // http://earth.uq.edu.au/centre-geoscience-computing //
6 // //
7 // Primary Business: Brisbane, Queensland, Australia //
8 // Licensed under the Open Software License version 3.0 //
9 // http://www.apache.org/licenses/LICENSE-2.0 //
10 // //
12 
16 template <typename T>
18  m_slab(a),m_curr(idx)
19 {}
20 
26 template <typename T>
28 {
29  return *this;
30 }
31 
35 template <typename T>
37 {
38  NTSlab_iter<T> t=*this;
39 
40  if(m_curr.second+1 < static_cast<int>(m_slab->nparts_at_gridpoint(m_curr.first))) {
41  m_curr.second++;
42  } else {
43  m_curr.second=0;
44  m_curr.first++;
45  while(
46  (m_curr.first < static_cast<int>(m_slab->slab_size()))
47  &&
48  (m_slab->nparts_at_gridpoint(m_curr.first) == 0)
49  ){
50  m_curr.first++;
51  }
52  }
53 
54  return t;
55 }
56 
62 template <typename T>
64 {
65  return *this;
66 }
67 
71 template <typename T>
73 {
74  NTSlab_iter<T> t=*this;
75 
76  if(m_curr.second>0) {
77  m_curr.second--;
78  } else {
79  m_curr.first--;
80  while((m_curr.first>=0)&&
81  m_slab->nparts_at_gridpoint(m_curr.first)==0){
82  m_curr.first--;
83  }
84  if(m_curr.first!=-1){
85  m_curr.second=m_slab->nparts_at_gridpoint(m_curr.first)-1;
86  }
87  }
88 
89  return t;
90 }
91 
97 template <typename T>
99 {
100  return m_slab->ptr(m_curr);
101 }
102 
108 template <typename T>
110 {
111  return m_slab->ref(m_curr);
112 }
113 
114 /*
115  get current index
116 */
117 template <typename T>
119 {
120  return m_curr;
121 }
122 
126 template <typename T>
127 bool operator== (const NTSlab_iter<T>& i1,const NTSlab_iter<T>& i2)
128 {
129  return (i1.m_slab==i2.m_slab &&
130  i1.m_curr.first==i2.m_curr.first &&
131  i1.m_curr.second==i2.m_curr.second);
132 }
133 
137 template <typename T>
138 bool operator!= (const NTSlab_iter<T>& i1,const NTSlab_iter<T>& i2)
139 {
140  return (i1.m_slab!=i2.m_slab ||
141  i1.m_curr.first!=i2.m_curr.first ||
142  i1.m_curr.second!=i2.m_curr.second);
143 
144 }
operator==
bool operator==(const NTSlab_iter< T > &i1, const NTSlab_iter< T > &i2)
Definition: nts_iter.hpp:127
NTSlab_iter::m_slab
NTSlab< T > * m_slab
Definition: nts_iter.h:49
operator!=
bool operator!=(const NTSlab_iter< T > &i1, const NTSlab_iter< T > &i2)
Definition: nts_iter.hpp:138
NTSlab_iter::operator*
T & operator*()
Definition: nts_iter.hpp:109
NTSlab_iter::operator->
T * operator->()
access ops
Definition: nts_iter.hpp:98
NTSlab_iter::operator++
NTSlab_iter & operator++()
move ops
Definition: nts_iter.hpp:27
NeighborTable::indextype
pair< int, int > indextype
Definition: ntable.h:72
NTSlab_iter::m_curr
NeighborTable< T >::indextype m_curr
Definition: nts_iter.h:50
NTSlab
representation of a slab of the search array of a NeigborTable
Definition: nt_slab.h:35
NTSlab_iter::operator--
NTSlab_iter & operator--()
Definition: nts_iter.hpp:63
NTSlab_iter
iterator for a NTSlab
Definition: nts_iter.h:39
NTSlab_iter::index
NeighborTable< T >::indextype index() const
Definition: nts_iter.hpp:118
NTSlab_iter::NTSlab_iter
NTSlab_iter(NTSlab< T > *, typename NeighborTable< T >::indextype)
Definition: nts_iter.hpp:17