rheolef  6.5
msg_local_context.h
Go to the documentation of this file.
1 #ifndef RHEO_MSG_LOCAL_CONTEXT_H
2 #define RHEO_MSG_LOCAL_CONTEXT_H
3 
4 # include "rheolef/msg_util.h"
5 namespace rheolef {
6 
44 template <
45  class InputIterator1,
46  class InputIterator2,
47  class Size,
48  class OutputIterator1,
49  class OutputIterator2>
50 void
52  InputIterator1 idx, // nidx
53  InputIterator1 last_idx,
54  InputIterator2 idy, // nidx
55  Size idy_maxval,
56  Size istart,
57  Size ilast,
58  OutputIterator1 to_loc_idx, // n_local
59  OutputIterator1 last_to_loc_idx,
60  OutputIterator2 from_loc_idy) // n_local
61 {
62  if (to_loc_idx == last_to_loc_idx) {
63  return;
64  }
65  while (idx != last_idx) {
66  Size idx_i = *idx;
67  if (idx_i >= istart && idx_i < ilast) {
68  Size idy_i = *idy;
69  assert_macro (idy_i < idy_maxval, "Scattering past end of TO vector");
70  (*to_loc_idx++) = idx_i - istart;
71  (*from_loc_idy++) = idy_i;
72  }
73  ++idx;
74  ++idy;
75  }
76 }
77 @endcode
78 } // namespace rheolef
79 #endif // RHEO_MSG_LOCAL_CONTEXT_H
80