1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 class Intracomm : public Comm {
22 public:
23
24
25 Intracomm() { }
26
27 Intracomm(const Comm_Null& data) : Comm(data) { }
28
29
30 #if 0
31
32
33
34
35
36
37 Intracomm(const Intracomm& data) : Comm(data), pmpi_comm(data) { }
38
39 Intracomm(MPI_Comm data) : Comm(data), pmpi_comm(data) { }
40
41 Intracomm(const PMPI::Intracomm& data)
42 : Comm((const PMPI::Comm&)data), pmpi_comm(data) { }
43
44
45 Intracomm& operator=(const Intracomm& data) {
46 Comm::operator=(data);
47 pmpi_comm = data.pmpi_comm;
48 return *this;
49 }
50 Intracomm& operator=(const Comm_Null& data) {
51 Comm::operator=(data);
52 pmpi_comm = (PMPI::Intracomm)data; return *this;
53 }
54
55 Intracomm& operator=(const MPI_Comm& data) {
56 Comm::operator=(data);
57 pmpi_comm = data;
58 return *this;
59 }
60
61 #else
62 Intracomm(const Intracomm& data) : Comm(data.mpi_comm) { }
63
64 inline Intracomm(MPI_Comm data);
65
66
67 Intracomm& operator=(const Intracomm& data) {
68 mpi_comm = data.mpi_comm; return *this;
69 }
70
71 Intracomm& operator=(const Comm_Null& data) {
72 mpi_comm = data; return *this;
73 }
74
75
76 Intracomm& operator=(const MPI_Comm& data) {
77 mpi_comm = data; return *this; }
78
79 #endif
80
81
82
83
84
85
86
87 virtual void
88 Scan(const void *sendbuf, void *recvbuf, int count,
89 const Datatype & datatype, const Op & op) const;
90
91 virtual void
92 Exscan(const void *sendbuf, void *recvbuf, int count,
93 const Datatype & datatype, const Op & op) const;
94
95
96
97
98
99 Intracomm Dup() const;
100
101 virtual Intracomm& Clone() const;
102
103 virtual Intracomm
104 Create(const Group& group) const;
105
106 virtual Intracomm
107 Split(int color, int key) const;
108
109 virtual Intercomm
110 Create_intercomm(int local_leader, const Comm& peer_comm,
111 int remote_leader, int tag) const;
112
113 virtual Cartcomm
114 Create_cart(int ndims, const int dims[],
115 const bool periods[], bool reorder) const;
116
117 virtual Graphcomm
118 Create_graph(int nnodes, const int index[],
119 const int edges[], bool reorder) const;
120
121
122
123
124
125
126 virtual Intercomm Accept(const char* port_name, const Info& info, int root)
127 const;
128
129 virtual Intercomm Connect(const char* port_name, const Info& info, int root)
130 const;
131
132 virtual Intercomm Spawn(const char* command, const char* argv[],
133 int maxprocs, const Info& info, int root) const;
134
135 virtual Intercomm Spawn(const char* command, const char* argv[],
136 int maxprocs, const Info& info,
137 int root, int array_of_errcodes[]) const;
138
139 virtual Intercomm Spawn_multiple(int count, const char* array_of_commands[],
140 const char** array_of_argv[],
141 const int array_of_maxprocs[],
142 const Info array_of_info[], int root);
143
144 virtual Intercomm Spawn_multiple(int count, const char* array_of_commands[],
145 const char** array_of_argv[],
146 const int array_of_maxprocs[],
147 const Info array_of_info[], int root,
148 int array_of_errcodes[]);
149
150
151
152
153
154 protected:
155
156
157 #if 0
158 PMPI::Intracomm pmpi_comm;
159 #endif
160
161
162
163
164 static inline MPI_Info *convert_info_to_mpi_info(int p_nbr,
165 const Info p_info_tbl[]);
166 };