1/*
2 * VerletNNIterator.hpp
3 *
4 * Created on: Aug 16, 2016
5 * Author: i-bird
6 */
7
8#ifndef OPENFPM_DATA_SRC_NN_VERLETLIST_VERLETNNITERATOR_HPP_
9#define OPENFPM_DATA_SRC_NN_VERLETLIST_VERLETNNITERATOR_HPP_
10
11#define VL_NON_SYMMETRIC 0
12#define VL_SYMMETRIC 1
13#define VL_CRS_SYMMETRIC 2
14
15/*! \brief Iterator for the neighborhood of the cell structures
16 *
17 * In general you never create it directly but you get it from the CellList structures
18 *
19 * It iterate across all the element of the selected cell and the near cells
20 *
21 * \tparam dim dimensionality of the space where the cell live
22 * \tparam Cell cell type on which the iterator is working
23 * \tparam NNc_size neighborhood size
24 * \tparam impl implementation specific options NO_CHECK do not do check on access, SAFE do check on access
25 *
26 */
27template<unsigned int dim, typename Ver> class VerletNNIterator
28{
29 //! start index for the neighborhood
30 const typename Ver::Mem_type_type::local_index_type * start;
31
32 //! stop index for the neighborhood
33 const typename Ver::Mem_type_type::local_index_type * stop;
34
35 //! actual neighborhood
36 const typename Ver::Mem_type_type::local_index_type * ele_id;
37
38 //! verlet list
39 Ver & ver;
40
41public:
42
43 /*! \brief
44 *
45 * Cell NN iterator
46 *
47 * \param part_id Particle id
48 * \param ver Verlet-list
49 *
50 */
51 inline VerletNNIterator(size_t part_id, Ver & ver)
52 :start(&ver.getStart(part_id)),stop(&ver.getStop(part_id)),ver(ver)
53 {ele_id = start;}
54
55 /*! \brief
56 *
57 * Check if there is the next element
58 *
59 * \return true if there is the next element
60 *
61 */
62 inline bool isNext()
63 {
64 if (ele_id < stop)
65 return true;
66 return false;
67 }
68
69 /*! \brief take the next element
70 *
71 * \return itself
72 *
73 */
74 inline VerletNNIterator & operator++()
75 {
76 ele_id++;
77
78 return *this;
79 }
80
81 /*! \brief Get the value of the cell
82 *
83 * \return the next element object
84 *
85 */
86 inline typename Ver::Mem_type_type::local_index_type get()
87 {
88 return ver.get_lin(ele_id);
89 }
90};
91
92
93#endif /* OPENFPM_DATA_SRC_NN_VERLETLIST_VERLETNNITERATOR_HPP_ */
94