Skip to content

Commit 25ce8f9

Browse files
authored
Merge pull request #13472 from hppritcha/add_lang_discrim_in_type_get_value_index
make type_get_value_index language aware
2 parents def9194 + 0213485 commit 25ce8f9

File tree

1 file changed

+34
-30
lines changed

1 file changed

+34
-30
lines changed

ompi/datatype/ompi_datatype_create.c

Lines changed: 34 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -133,42 +133,46 @@ int
133133
ompi_datatype_get_value_index(const ompi_datatype_t *value_type, const ompi_datatype_t *index_type, ompi_datatype_t **pair_type)
134134
{
135135
*pair_type = (ompi_datatype_t *)&ompi_mpi_datatype_null;
136-
137-
/* C predefined data types */
138-
if (index_type->id == OMPI_DATATYPE_MPI_INT) {
139-
if (value_type->id == OMPI_DATATYPE_MPI_FLOAT) {
140-
*pair_type = (ompi_datatype_t *)&ompi_mpi_float_int;
141-
} else if (value_type->id == OMPI_DATATYPE_MPI_DOUBLE) {
142-
*pair_type = (ompi_datatype_t *)&ompi_mpi_double_int;
143-
} else if (value_type->id == OMPI_DATATYPE_MPI_LONG) {
144-
*pair_type = (ompi_datatype_t *)&ompi_mpi_long_int;
145-
} else if (value_type->id == OMPI_DATATYPE_MPI_SHORT) {
146-
*pair_type = (ompi_datatype_t *)&ompi_mpi_short_int;
147-
} else if (value_type->id == OMPI_DATATYPE_MPI_INT) {
148-
*pair_type = (ompi_datatype_t *)&ompi_mpi_2int;
149-
} else if (value_type->id == OMPI_DATATYPE_MPI_LONG_DOUBLE) {
150-
*pair_type = (ompi_datatype_t *)&ompi_mpi_longdbl_int;
136+
bool is_fortran = ((index_type->super.flags & OMPI_DATATYPE_FLAG_DATA_FORTRAN) == OMPI_DATATYPE_FLAG_DATA_FORTRAN) ? true : false;
137+
138+
if (false == is_fortran) {
139+
if (index_type->id == OMPI_DATATYPE_MPI_INT) {
140+
if (value_type->id == OMPI_DATATYPE_MPI_FLOAT) {
141+
*pair_type = (ompi_datatype_t *)&ompi_mpi_float_int;
142+
} else if (value_type->id == OMPI_DATATYPE_MPI_DOUBLE) {
143+
*pair_type = (ompi_datatype_t *)&ompi_mpi_double_int;
144+
} else if (value_type->id == OMPI_DATATYPE_MPI_LONG) {
145+
*pair_type = (ompi_datatype_t *)&ompi_mpi_long_int;
146+
} else if (value_type->id == OMPI_DATATYPE_MPI_SHORT) {
147+
*pair_type = (ompi_datatype_t *)&ompi_mpi_short_int;
148+
} else if (value_type->id == OMPI_DATATYPE_MPI_INT) {
149+
*pair_type = (ompi_datatype_t *)&ompi_mpi_2int;
150+
} else if (value_type->id == OMPI_DATATYPE_MPI_LONG_DOUBLE) {
151+
*pair_type = (ompi_datatype_t *)&ompi_mpi_longdbl_int;
152+
}
151153
}
152154
/* Fortran predefined data types */
153-
} else if ((index_type->id == OMPI_DATATYPE_MPI_INTEGER) &&
154-
(value_type->id == OMPI_DATATYPE_MPI_INTEGER)) {
155-
*pair_type = (ompi_datatype_t *)&ompi_mpi_2integer;
156-
} else if ((index_type->id == OMPI_DATATYPE_MPI_FLOAT) &&
157-
(value_type->id == OMPI_DATATYPE_MPI_FLOAT)) {
158-
*pair_type = (ompi_datatype_t *)&ompi_mpi_2real;
159-
} else if ((index_type->id == OMPI_DATATYPE_MPI_DOUBLE) &&
160-
(value_type->id == OMPI_DATATYPE_MPI_DOUBLE)) {
161-
*pair_type = (ompi_datatype_t *)&ompi_mpi_2dblprec;
155+
} else {
156+
if ((index_type->id == OMPI_DATATYPE_MPI_INTEGER) &&
157+
(value_type->id == OMPI_DATATYPE_MPI_INTEGER)) {
158+
*pair_type = (ompi_datatype_t *)&ompi_mpi_2integer;
159+
} else if ((index_type->id == OMPI_DATATYPE_MPI_FLOAT) &&
160+
(value_type->id == OMPI_DATATYPE_MPI_FLOAT)) {
161+
*pair_type = (ompi_datatype_t *)&ompi_mpi_2real;
162+
} else if ((index_type->id == OMPI_DATATYPE_MPI_DOUBLE) &&
163+
(value_type->id == OMPI_DATATYPE_MPI_DOUBLE)) {
164+
*pair_type = (ompi_datatype_t *)&ompi_mpi_2dblprec;
162165
#if OMPI_HAVE_FORTRAN_COMPLEX
163-
} else if ((index_type->id == OMPI_DATATYPE_MPI_COMPLEX) &&
164-
(value_type->id == OMPI_DATATYPE_MPI_COMPLEX)) {
165-
*pair_type = (ompi_datatype_t *)&ompi_mpi_2cplex;
166+
} else if ((index_type->id == OMPI_DATATYPE_MPI_COMPLEX) &&
167+
(value_type->id == OMPI_DATATYPE_MPI_COMPLEX)) {
168+
*pair_type = (ompi_datatype_t *)&ompi_mpi_2cplex;
166169
#endif
167170
#if OMPI_HAVE_FORTRAN_DOUBLE_COMPLEX
168-
} else if ((index_type->id == OMPI_DATATYPE_MPI_DOUBLE_COMPLEX) &&
169-
(value_type->id == OMPI_DATATYPE_MPI_DOUBLE_COMPLEX)) {
170-
*pair_type = (ompi_datatype_t *)&ompi_mpi_2dblcplex;
171+
} else if ((index_type->id == OMPI_DATATYPE_MPI_DOUBLE_COMPLEX) &&
172+
(value_type->id == OMPI_DATATYPE_MPI_DOUBLE_COMPLEX)) {
173+
*pair_type = (ompi_datatype_t *)&ompi_mpi_2dblcplex;
171174
#endif
175+
}
172176
}
173177

174178
return OMPI_SUCCESS;

0 commit comments

Comments
 (0)