rheolef  6.5
msg_to_context.h
Go to the documentation of this file.
1 #ifndef RHEO_MSG_TO_CONTEXT_H
2 #define RHEO_MSG_TO_CONTEXT_H
3 
4 # include "rheolef/msg_util.h"
5 namespace rheolef {
6 
47 template <
48  class InputIterator1,
49  class InputRandomIterator2,
50  class InputRandomIterator3,
51  class InputRandomIterator4,
52  class Size,
53  class OutputIterator1,
54  class OutputIterator2,
55  class OutputIterator3>
56 void
58  InputIterator1 perm, // receive_nproc
59  InputIterator1 last_perm,
60  InputRandomIterator2 r_iproc, // receive_nproc
61  InputRandomIterator3 r_size, // receive_nproc
62  InputRandomIterator4 r_idx, // receive_nproc*receive_max_size
63  Size receive_max_size,
64  Size istart,
65  OutputIterator1 to_proc, // receive_nproc
66  OutputIterator2 to_ptr, // receive_nproc+1
67  OutputIterator3 to_idx) // receive_total_size
68 {
69  OutputIterator2 prec_ptr = to_ptr;
70  (*to_ptr++) = 0;
71  while (perm != last_perm) {
72  Size j1 = (*perm++);
73  (*to_proc++) = r_iproc[j1];
74  Size size = r_size[j1];
75  (*to_ptr++) = (*prec_ptr++) + size;
76  InputRandomIterator4 iter_idx = r_idx + j1*receive_max_size;
77  InputRandomIterator4 last_idx = iter_idx + size;
78  while (iter_idx != last_idx)
79  (*to_idx++) = (*iter_idx++) - istart;
80  }
81 }
82 
83 @endcode
84 } // namespace rheolef
85 #endif // RHEO_MSG_TO_CONTEXT_H
86