-int smpi_comm_c2f(MPI_Comm comm) {
- static int comm_id = 0;
- char key[KEY_SIZE];
- xbt_dict_set(comm_lookup, comm==MPI_COMM_WORLD? get_key(key, comm_id) : get_key_id(key, comm_id), comm, nullptr);
- comm_id++;
- return comm_id-1;
-}
-
-static void free_comm(int comm) {
- char key[KEY_SIZE];
- xbt_dict_remove(comm_lookup, comm==0? get_key(key, comm) : get_key_id(key, comm));
-}
-
-MPI_Comm smpi_comm_f2c(int comm) {
- smpi_init_fortran_types();
- if(comm == -2) {
- return MPI_COMM_SELF;
- } else if(comm==0){
- return MPI_COMM_WORLD;
- } else if(comm_lookup != nullptr && comm >= 0) {
- char key[KEY_SIZE];
- MPI_Comm tmp = static_cast<MPI_Comm>(xbt_dict_get_or_null(comm_lookup,get_key_id(key, comm)));
- return tmp != nullptr ? tmp : MPI_COMM_NULL ;
- } else {
- return MPI_COMM_NULL;
- }
-}
-
-int smpi_group_c2f(MPI_Group group) {
- static int group_id = 0;
- char key[KEY_SIZE];
- xbt_dict_set(group_lookup, get_key(key, group_id), group, nullptr);
- group_id++;
- return group_id-1;
-}
-
-MPI_Group smpi_group_f2c(int group) {
- smpi_init_fortran_types();
- if(group == -2) {
- return MPI_GROUP_EMPTY;
- } else if(group_lookup != nullptr && group >= 0) {
- char key[KEY_SIZE];
- return static_cast<MPI_Group>(xbt_dict_get_or_null(group_lookup, get_key(key, group)));
- } else {
- return MPI_GROUP_NULL;
- }
-}
-
-static void free_group(int group) {
- char key[KEY_SIZE];
- xbt_dict_remove(group_lookup, get_key(key, group));
-}
-
-int smpi_request_c2f(MPI_Request req) {
- static int request_id = 0;
- char key[KEY_SIZE];
- xbt_dict_set(request_lookup, get_key_id(key, request_id), req, nullptr);
- request_id++;
- return request_id-1;
-}
-
-MPI_Request smpi_request_f2c(int req) {
- smpi_init_fortran_types();
- char key[KEY_SIZE];
- if(req==MPI_FORTRAN_REQUEST_NULL)
- return MPI_REQUEST_NULL;
- return static_cast<MPI_Request>(xbt_dict_get(request_lookup, get_key_id(key, req)));
-}
-
-static void free_request(int request) {
- char key[KEY_SIZE];
- if(request!=MPI_FORTRAN_REQUEST_NULL)
- xbt_dict_remove(request_lookup, get_key_id(key, request));
-}
-
-int smpi_type_c2f(MPI_Datatype datatype) {
- static int datatype_id = 0;
- char key[KEY_SIZE];
- xbt_dict_set(datatype_lookup, get_key(key, datatype_id), datatype, nullptr);
- datatype_id++;
- return datatype_id-1;
-}
-
-MPI_Datatype smpi_type_f2c(int datatype) {
- smpi_init_fortran_types();
- char key[KEY_SIZE];
- return datatype >= 0 ? static_cast<MPI_Datatype>(xbt_dict_get_or_null(datatype_lookup, get_key(key, datatype))): MPI_DATATYPE_NULL;
-}
-
-static void free_datatype(int datatype) {
- char key[KEY_SIZE];
- xbt_dict_remove(datatype_lookup, get_key(key, datatype));
-}
-
-int smpi_op_c2f(MPI_Op op) {
- static int op_id = 0;
- char key[KEY_SIZE];
- xbt_dict_set(op_lookup, get_key(key, op_id), op, nullptr);
- op_id++;
- return op_id-1;
-}
-
-MPI_Op smpi_op_f2c(int op) {
- smpi_init_fortran_types();
- char key[KEY_SIZE];
- return op >= 0 ? static_cast<MPI_Op>(xbt_dict_get_or_null(op_lookup, get_key(key, op))): MPI_OP_NULL;
-}