1/*
2 * vector_map_iterator.hpp
3 *
4 * Created on: Apr 1, 2017
5 * Author: i-bird
6 */
7
8#ifndef OPENFPM_DATA_SRC_VECTOR_VECTOR_MAP_ITERATOR_HPP_
9#define OPENFPM_DATA_SRC_VECTOR_VECTOR_MAP_ITERATOR_HPP_
10
11namespace openfpm
12{
13 /*! \brief Vector iterator
14 *
15 */
16
17 class vector_key_iterator
18 {
19 //! Linearized end element
20 size_t end;
21
22 protected:
23
24 //! Actual key
25 size_t gk;
26
27 public:
28
29 /*! \brief Constructor require the size of the vector
30 *
31 * \param end point
32 * \param start starting point
33 *
34 */
35 vector_key_iterator(size_t end, size_t start = 0)
36 : end(end),gk(start)
37 {}
38
39
40 /*! \brief Get the next element
41 *
42 * Get the next element
43 *
44 * \return the next grid_key
45 *
46 */
47 vector_key_iterator & operator++()
48 {
49 //! increment the first index
50
51 gk++;
52
53 return *this;
54 }
55
56 /*! \brief Set the dimension
57 *
58 * \param d is the dimension (IGNORED is by default 0)
59 * \param sz set the counter to sz
60 *
61 */
62 void set(int d, size_t sz)
63 {
64 // set the counter dim to sz
65
66 gk = sz;
67 }
68
69 /*! \brief Check if there is the next element
70 *
71 * Check if there is the next element
72 *
73 * \return true if there is the next, false otherwise
74 *
75 */
76 bool isNext() const
77 {
78 if (gk < end)
79 {
80 //! we did not reach the end of the grid
81
82 return true;
83 }
84
85 //! we reach the end of the grid
86 return false;
87 }
88
89 /*! \brief Get the actual key
90 *
91 * Get the actual key
92 *
93 * \return the actual key
94 *
95 */
96 size_t get() const
97 {
98 return gk;
99 }
100 };
101
102 /*! \brief Vector iterator
103 *
104 * Vector iterator over a predefined sequence
105 *
106 */
107
108 template<typename lid>
109 class vector_key_iterator_seq
110 {
111 openfpm::vector<lid> & dp;
112
113 protected:
114
115 //! Actual key
116 size_t gk;
117
118 public:
119
120 /*! \brief Constructor require the sequence
121 *
122 * \param dp
123 *
124 */
125 vector_key_iterator_seq(openfpm::vector<lid> & dp)
126 :dp(dp),gk(0)
127 {}
128
129
130 /*! \brief Get the next element
131 *
132 * Get the next element
133 *
134 * \return the next grid_key
135 *
136 */
137 vector_key_iterator_seq<lid> & operator++()
138 {
139 //! increment the first index
140
141 gk++;
142
143 return *this;
144 }
145
146 /*! \brief Set the dimension
147 *
148 * \param d is the dimension (IGNORED is by default 0)
149 * \param sz set the counter to sz
150 *
151 */
152 void set(int d, size_t sz)
153 {
154 // set the counter dim to sz
155
156 gk = sz;
157 }
158
159 /*! \brief Check if there is the next element
160 *
161 * Check if there is the next element
162 *
163 * \return true if there is the next, false otherwise
164 *
165 */
166 bool isNext() const
167 {
168 if (gk < dp.size())
169 {
170 //! we did not reach the end of the grid
171
172 return true;
173 }
174
175 //! we reach the end of the grid
176 return false;
177 }
178
179 /*! \brief Get the actual key
180 *
181 * Get the actual key
182 *
183 * \return the actual key
184 *
185 */
186 size_t get() const
187 {
188 return dp.get(gk);
189 }
190 };
191}
192
193
194#endif /* OPENFPM_DATA_SRC_VECTOR_VECTOR_MAP_ITERATOR_HPP_ */
195