OpenFPM  5.2.0
Project that contain the implementation of distributed structures
vector_dist_operators_list_ker.hpp
1 /*
2  * vector_dist_operators_list_ker.hpp
3  *
4  * Created on: Jun 7, 2019
5  * Author: i-bird
6  */
7 
8 #ifndef VECTOR_DIST_OPERATORS_LIST_KER_HPP_
9 #define VECTOR_DIST_OPERATORS_LIST_KER_HPP_
10 
11 template<typename T>
12 struct ref_wrap
13 {
14  T & v;
15 
16  ref_wrap(T & v)
17  :v(v) {}
18 
19  ref_wrap & operator=(const ref_wrap<T> & rw)
20  {
21  v = rw.v;
22  return *this;
23  }
24 };
25 
33 template<typename vector_dist_ker_type>
35 {
37 
38 public:
39 
46  void add(vector_dist_ker_type & v)
47  {
49 
50  vkers.add(rw);
51 
52  if (vkers.size() >= 64)
53  {
54  std::cout << __FILE__ << ":" << __LINE__ << " The array of tracked vector_dist_ker become suspiciously big, are there memory leak ? " << std::endl;
55  }
56  }
57 
64  void update(const vector_dist_ker_type & v)
65  {
66  for (size_t i = 0 ; i < vkers.size() ; i++)
67  {
68  vkers.get(i).v = v;
69  }
70  }
71 
78  void remove(vector_dist_ker_type & v)
79  {
80  for (size_t i = 0 ; i < vkers.size() ; i++)
81  {
82  if (&vkers.get(i).v == &v)
83  {
84  vkers.remove(i);
85  break;
86  }
87  }
88  }
89 
95  size_t n_entry()
96  {
97  return vkers.size();
98  }
99 
105  bool check(const vector_dist_ker_type & v)
106  {
107  for (size_t i = 0 ; i < vkers.size() ; i++)
108  {
109  if (!(vkers.get(i).v == v))
110  {
111  return false;
112  }
113  }
114 
115  return true;
116  }
117 };
118 
119 #endif /* VECTOR_DIST_OPERATORS_LIST_KER_HPP_ */
Implementation of 1-D std::vector like structure.
Definition: map_vector.hpp:204
size_t size()
Stub size.
Definition: map_vector.hpp:212
This class contain a list of all tracked vector_dist_ker around.
void add(vector_dist_ker_type &v)
Add a new vector_dist_kernel to track.
void update(const vector_dist_ker_type &v)
Update the addresses of all vector_dist_kernels around.
void remove(vector_dist_ker_type &v)
Remove one vector_dist_kernels entry.
size_t n_entry()
Return the number of entries.
bool check(const vector_dist_ker_type &v)
Check that all the entries are aligned to the latest vector_dist_ker_type.