X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/149c63f36e15b8500b1e826bda5138318ff7ba2b..39c935d6d5ee86d153f6f7e6a10d723ae7c57f6f:/src/smpi/bindings/smpi_f77_type.cpp diff --git a/src/smpi/bindings/smpi_f77_type.cpp b/src/smpi/bindings/smpi_f77_type.cpp index ceedaabf06..91d7fa2d67 100644 --- a/src/smpi/bindings/smpi_f77_type.cpp +++ b/src/smpi/bindings/smpi_f77_type.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2010-2020. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2010-2021. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -7,6 +7,8 @@ #include "smpi_comm.hpp" #include "smpi_datatype.hpp" +#include + extern "C" { // This should really use the C linkage to be usable from Fortran void mpi_type_extent_(int* datatype, MPI_Aint * extent, int* ierr){ @@ -42,12 +44,10 @@ void mpi_type_dup_ (int* datatype, int* newdatatype, int* ierr){ } } -void mpi_type_set_name_ (int* datatype, char * name, int* ierr, int size){ - char* tname = xbt_new(char, size+1); - strncpy(tname, name, size); - tname[size]='\0'; - *ierr = MPI_Type_set_name(simgrid::smpi::Datatype::f2c(*datatype), tname); - xbt_free(tname); +void mpi_type_set_name_(int* datatype, char* name, int* ierr, int size) +{ + std::string tname(name, size); + *ierr = MPI_Type_set_name(simgrid::smpi::Datatype::f2c(*datatype), tname.c_str()); } void mpi_type_get_name_ (int* datatype, char * name, int* len, int* ierr){ @@ -64,9 +64,9 @@ void mpi_type_get_attr_ (int* type, int* type_keyval, int *attribute_val, int* f } void mpi_type_set_attr_ (int* type, int* type_keyval, int *attribute_val, int* ierr){ - int* val = (int*)xbt_malloc(sizeof(int)); - *val=*attribute_val; - *ierr = MPI_Type_set_attr ( simgrid::smpi::Datatype::f2c(*type), *type_keyval, val); + auto* val = static_cast(xbt_malloc(sizeof(int))); + *val = *attribute_val; + *ierr = MPI_Type_set_attr(simgrid::smpi::Datatype::f2c(*type), *type_keyval, val); } void mpi_type_delete_attr_ (int* type, int* type_keyval, int* ierr){ @@ -132,14 +132,13 @@ void mpi_type_create_hvector_(int* count, int* blocklen, MPI_Aint* stride, int* void mpi_type_hindexed_ (int* count, int* blocklens, int* indices, int* old_type, int* newtype, int* ierr) { MPI_Datatype tmp; - MPI_Aint* indices_aint=new MPI_Aint[*count]; + std::vector indices_aint(*count); for(int i=0; i<*count; i++) indices_aint[i]=indices[i]; - *ierr = MPI_Type_hindexed(*count, blocklens, indices_aint, simgrid::smpi::Datatype::f2c(*old_type), &tmp); + *ierr = MPI_Type_hindexed(*count, blocklens, indices_aint.data(), simgrid::smpi::Datatype::f2c(*old_type), &tmp); if(*ierr == MPI_SUCCESS) { *newtype = tmp->add_f(); } - delete[] indices_aint; } void mpi_type_create_hindexed_(int* count, int* blocklens, MPI_Aint* indices, int* old_type, int* newtype, int* ierr){ @@ -186,33 +185,28 @@ void mpi_type_create_indexed_block_ (int* count, int* blocklength, int* indices, void mpi_type_struct_ (int* count, int* blocklens, int* indices, int* old_types, int* newtype, int* ierr) { MPI_Datatype tmp; - int i=0; - MPI_Datatype* types = static_cast(xbt_malloc(*count*sizeof(MPI_Datatype))); - MPI_Aint* indices_aint=new MPI_Aint[*count]; - for(i=0; i< *count; i++){ + std::vector indices_aint(*count); + std::vector types(*count); + for (int i = 0; i < *count; i++) { indices_aint[i]=indices[i]; types[i] = simgrid::smpi::Datatype::f2c(old_types[i]); } - *ierr = MPI_Type_struct(*count, blocklens, indices_aint, types, &tmp); + *ierr = MPI_Type_struct(*count, blocklens, indices_aint.data(), types.data(), &tmp); if(*ierr == MPI_SUCCESS) { *newtype = tmp->add_f(); } - xbt_free(types); - delete[] indices_aint; } void mpi_type_create_struct_(int* count, int* blocklens, MPI_Aint* indices, int* old_types, int* newtype, int* ierr){ MPI_Datatype tmp; - int i=0; - MPI_Datatype* types = static_cast(xbt_malloc(*count*sizeof(MPI_Datatype))); - for(i=0; i< *count; i++){ + std::vector types(*count); + for (int i = 0; i < *count; i++) { types[i] = simgrid::smpi::Datatype::f2c(old_types[i]); } - *ierr = MPI_Type_create_struct(*count, blocklens, indices, types, &tmp); + *ierr = MPI_Type_create_struct(*count, blocklens, indices, types.data(), &tmp); if(*ierr == MPI_SUCCESS) { *newtype = tmp->add_f(); } - xbt_free(types); } void mpi_pack_ (void* inbuf, int* incount, int* type, void* outbuf, int* outcount, int* position, int* comm, int* ierr) {