Skip to content

Commit d29c84d

Browse files
Remove more boilerplate code. (#90)
Signed-off-by: Samuel K. Gutierrez <[email protected]>
1 parent 5c1d82a commit d29c84d

File tree

2 files changed

+49
-97
lines changed

2 files changed

+49
-97
lines changed

src/qvi-mpi.cc

+26-45
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ struct qvi_mpi_group_s {
3737
};
3838

3939
struct qvi_mpi_s {
40+
int qvim_rc = QV_ERR_INTERNAL;
4041
/** Task associated with this MPI process */
4142
qvi_task_t *task = nullptr;
4243
/** Node size */
@@ -50,7 +51,26 @@ struct qvi_mpi_s {
5051
/** Node communicator */
5152
MPI_Comm node_comm = MPI_COMM_NULL;
5253
/** Group table (ID to internal structure mapping) */
53-
qvi_mpi_group_tab_t *group_tab = nullptr;
54+
qvi_mpi_group_tab_t group_tab;
55+
/** Constructor */
56+
qvi_mpi_s(void)
57+
{
58+
qvim_rc = qvi_task_new(&task);
59+
}
60+
/** Destructor */
61+
~qvi_mpi_s(void)
62+
{
63+
for (auto &i : group_tab) {
64+
auto &mpi_comm = i.second.mpi_comm;
65+
if (mpi_comm != MPI_COMM_NULL) {
66+
MPI_Comm_free(&mpi_comm);
67+
}
68+
}
69+
if (world_comm != MPI_COMM_NULL) {
70+
MPI_Comm_free(&world_comm);
71+
}
72+
qvi_task_free(&task);
73+
}
5474
};
5575

5676
/**
@@ -203,61 +223,22 @@ group_add(
203223
if (rc != QV_SUCCESS) return rc;
204224
}
205225
group->tabid = gtid;
206-
mpi->group_tab->insert({gtid, *group});
226+
mpi->group_tab.insert({gtid, *group});
207227
return QV_SUCCESS;
208228
}
209229

210230
int
211231
qvi_mpi_new(
212232
qvi_mpi_t **mpi
213233
) {
214-
int rc = QV_SUCCESS;
215-
216-
qvi_mpi_t *impi = qvi_new qvi_mpi_t();
217-
if (!impi) {
218-
rc = QV_ERR_OOR;
219-
goto out;
220-
}
221-
// Task
222-
rc = qvi_task_new(&impi->task);
223-
if (rc != QV_SUCCESS) goto out;
224-
// Groups
225-
impi->group_tab = qvi_new qvi_mpi_group_tab_t();
226-
if (!impi->group_tab) {
227-
rc = QV_ERR_OOR;
228-
}
229-
out:
230-
if (rc != QV_SUCCESS) {
231-
qvi_mpi_free(&impi);
232-
}
233-
*mpi = impi;
234-
return rc;
234+
return qvi_new_rc(mpi);
235235
}
236236

237237
void
238238
qvi_mpi_free(
239239
qvi_mpi_t **mpi
240240
) {
241-
if (!mpi) return;
242-
qvi_mpi_t *impi = *mpi;
243-
if (!impi) goto out;
244-
if (impi->group_tab) {
245-
for (auto &i : *impi->group_tab) {
246-
auto &mpi_comm = i.second.mpi_comm;
247-
if (mpi_comm != MPI_COMM_NULL) {
248-
MPI_Comm_free(&mpi_comm);
249-
}
250-
}
251-
delete impi->group_tab;
252-
impi->group_tab = nullptr;
253-
}
254-
if (impi->world_comm != MPI_COMM_NULL) {
255-
MPI_Comm_free(&impi->world_comm);
256-
}
257-
qvi_task_free(&impi->task);
258-
delete impi;
259-
out:
260-
*mpi = nullptr;
241+
qvi_delete(mpi);
261242
}
262243

263244
qvi_task_t *
@@ -481,8 +462,8 @@ qvi_mpi_group_lookup_by_id(
481462
qvi_mpi_group_id_t id,
482463
qvi_mpi_group_t *group
483464
) {
484-
auto got = mpi->group_tab->find(id);
485-
if (got == mpi->group_tab->end()) {
465+
auto got = mpi->group_tab.find(id);
466+
if (got == mpi->group_tab.end()) {
486467
return QV_ERR_NOT_FOUND;
487468
}
488469
cp_mpi_group(&got->second, group);

src/qvi-process.cc

+23-52
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
*/
1313

1414
#include "qvi-common.h"
15-
1615
#include "qvi-process.h"
16+
#include "qvi-utils.h"
1717
#include "qvi-group.h"
1818

1919
// Type definitions.
@@ -24,19 +24,35 @@ using qvi_process_group_tab_t = std::unordered_map<
2424
>;
2525

2626
struct qvi_process_group_s {
27+
int qvim_rc = QV_SUCCESS;
2728
/** ID used for table lookups */
2829
qvi_process_group_id_t tabid = 0;
2930
/** ID (rank) in group */
3031
int id = 0;
3132
/** Size of group */
3233
int size = 0;
34+
/** Constructor */
35+
qvi_process_group_s(void) = default;
36+
/** Destructor */
37+
~qvi_process_group_s(void) = default;
3338
};
3439

3540
struct qvi_process_s {
41+
int qvim_rc = QV_ERR_INTERNAL;
3642
/** Task associated with this process */
3743
qvi_task_t *task = nullptr;
3844
/** Maintains the next available group ID value */
39-
qvi_process_group_tab_t *group_tab = nullptr;
45+
qvi_process_group_tab_t group_tab;
46+
/** Constructor */
47+
qvi_process_s(void)
48+
{
49+
qvim_rc = qvi_task_new(&task);
50+
}
51+
/** Destructor */
52+
~qvi_process_s(void)
53+
{
54+
qvi_task_free(&task);
55+
}
4056
};
4157

4258
/**
@@ -54,44 +70,14 @@ int
5470
qvi_process_new(
5571
qvi_process_t **proc
5672
) {
57-
int rc = QV_SUCCESS;
58-
59-
qvi_process_t *iproc = qvi_new qvi_process_t();
60-
if (!iproc) {
61-
rc = QV_ERR_OOR;
62-
goto out;
63-
}
64-
// Task
65-
rc = qvi_task_new(&iproc->task);
66-
if (rc != QV_SUCCESS) goto out;
67-
// Groups
68-
iproc->group_tab = qvi_new qvi_process_group_tab_t();
69-
if (!iproc->group_tab) {
70-
rc = QV_ERR_OOR;
71-
}
72-
out:
73-
if (rc != QV_SUCCESS) {
74-
qvi_process_free(&iproc);
75-
}
76-
*proc = iproc;
77-
return rc;
73+
return qvi_new_rc(proc);
7874
}
7975

8076
void
8177
qvi_process_free(
8278
qvi_process_t **proc
8379
) {
84-
if (!proc) return;
85-
qvi_process_t *iproc = *proc;
86-
if (!iproc) goto out;
87-
if (iproc->group_tab) {
88-
delete iproc->group_tab;
89-
iproc->group_tab = nullptr;
90-
}
91-
qvi_task_free(&iproc->task);
92-
delete iproc;
93-
out:
94-
*proc = nullptr;
80+
return qvi_delete(proc);
9581
}
9682

9783
/**
@@ -134,29 +120,14 @@ int
134120
qvi_process_group_new(
135121
qvi_process_group_t **procgrp
136122
) {
137-
int rc = QV_SUCCESS;
138-
139-
qvi_process_group_t *iprocgrp = qvi_new qvi_process_group_t();
140-
if (!iprocgrp) {
141-
rc = QV_ERR_OOR;
142-
}
143-
if (rc != QV_SUCCESS) {
144-
qvi_process_group_free(&iprocgrp);
145-
}
146-
*procgrp = iprocgrp;
147-
return rc;
123+
return qvi_new_rc(procgrp);
148124
}
149125

150126
void
151127
qvi_process_group_free(
152128
qvi_process_group_t **procgrp
153129
) {
154-
if (!procgrp) return;
155-
qvi_process_group_t *iprocgrp = *procgrp;
156-
if (!iprocgrp) goto out;
157-
delete iprocgrp;
158-
out:
159-
*procgrp = nullptr;
130+
qvi_delete(procgrp);
160131
}
161132

162133
int
@@ -177,7 +148,7 @@ qvi_process_group_create(
177148
igroup->id = 0;
178149
igroup->size = 1;
179150

180-
proc->group_tab->insert({gtid, *igroup});
151+
proc->group_tab.insert({gtid, *igroup});
181152
out:
182153
if (rc != QV_SUCCESS) {
183154
qvi_process_group_free(&igroup);

0 commit comments

Comments
 (0)