X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/3298143d154ffad1e3935770d53b15b34caea69a..ea74f5d95928a521a588737e81f1de94eef25d19:/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 1da72486c8..389f272ee0 100644 --- a/src/smpi/bindings/smpi_f77_type.cpp +++ b/src/smpi/bindings/smpi_f77_type.cpp @@ -1,12 +1,14 @@ -/* Copyright (c) 2010-2017. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2010-2022. 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. */ -#include "private.h" +#include "private.hpp" #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){ @@ -38,57 +40,58 @@ void mpi_type_dup_ (int* datatype, int* newdatatype, int* ierr){ MPI_Datatype tmp; *ierr = MPI_Type_dup(simgrid::smpi::Datatype::f2c(*datatype), &tmp); if(*ierr == MPI_SUCCESS) { - *newdatatype = tmp->add_f(); + *newdatatype = tmp->c2f(); } } -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){ *ierr = MPI_Type_get_name(simgrid::smpi::Datatype::f2c(*datatype),name,len); - if(*len>0) - name[*len]=' '; + for(int i = *len; i(copy_fn), reinterpret_cast(delete_fn), - keyval, extra_state) ; + smpi_copy_fn _copy_fn={nullptr,nullptr,nullptr,nullptr,(*(int*)copy_fn) == 0 ? nullptr : reinterpret_cast(copy_fn),nullptr}; + smpi_delete_fn _delete_fn={nullptr,nullptr,nullptr,nullptr,(*(int*)delete_fn) == 0 ? nullptr : reinterpret_cast(delete_fn),nullptr}; + *ierr = + simgrid::smpi::Keyval::keyval_create(_copy_fn, _delete_fn, keyval, extra_state, true); } void mpi_type_free_keyval_ (int* keyval, int* ierr) { *ierr = MPI_Type_free_keyval( keyval); } -void mpi_type_get_extent_ (int* datatype, MPI_Aint * lb, MPI_Aint * extent, int* ierr){ - - *ierr = MPI_Type_get_extent(simgrid::smpi::Datatype::f2c(*datatype), lb, extent); +void mpi_type_get_extent_(int* datatype, MPI_Aint* lb, MPI_Aint* extent, int* ierr) +{ + *ierr = MPI_Type_get_extent(simgrid::smpi::Datatype::f2c(*datatype), lb, extent); } -void mpi_type_get_true_extent_ (int* datatype, MPI_Aint * lb, MPI_Aint * extent, int* ierr){ - - *ierr = MPI_Type_get_true_extent(simgrid::smpi::Datatype::f2c(*datatype), lb, extent); +void mpi_type_get_true_extent_(int* datatype, MPI_Aint* lb, MPI_Aint* extent, int* ierr) +{ + *ierr = MPI_Type_get_true_extent(simgrid::smpi::Datatype::f2c(*datatype), lb, extent); } void mpi_type_commit_(int* datatype, int* ierr){ @@ -100,7 +103,7 @@ void mpi_type_contiguous_ (int* count, int* old_type, int* newtype, int* ierr) MPI_Datatype tmp; *ierr = MPI_Type_contiguous(*count, simgrid::smpi::Datatype::f2c(*old_type), &tmp); if(*ierr == MPI_SUCCESS) { - *newtype = tmp->add_f(); + *newtype = tmp->c2f(); } } @@ -108,7 +111,7 @@ void mpi_type_vector_(int* count, int* blocklen, int* stride, int* old_type, int MPI_Datatype tmp; *ierr= MPI_Type_vector(*count, *blocklen, *stride, simgrid::smpi::Datatype::f2c(*old_type), &tmp); if(*ierr == MPI_SUCCESS) { - *newtype = tmp->add_f(); + *newtype = tmp->c2f(); } } @@ -116,7 +119,7 @@ void mpi_type_hvector_(int* count, int* blocklen, MPI_Aint* stride, int* old_typ MPI_Datatype tmp; *ierr= MPI_Type_hvector (*count, *blocklen, *stride, simgrid::smpi::Datatype::f2c(*old_type), &tmp); if(*ierr == MPI_SUCCESS) { - *newtype = tmp->add_f(); + *newtype = tmp->c2f(); } } @@ -124,15 +127,18 @@ void mpi_type_create_hvector_(int* count, int* blocklen, MPI_Aint* stride, int* MPI_Datatype tmp; *ierr= MPI_Type_hvector(*count, *blocklen, *stride, simgrid::smpi::Datatype::f2c(*old_type), &tmp); if(*ierr == MPI_SUCCESS) { - *newtype = tmp->add_f(); + *newtype = tmp->c2f(); } } -void mpi_type_hindexed_ (int* count, int* blocklens, MPI_Aint* indices, int* old_type, int* newtype, int* ierr) { +void mpi_type_hindexed_ (int* count, int* blocklens, int* indices, int* old_type, int* newtype, int* ierr) { MPI_Datatype tmp; - *ierr = MPI_Type_hindexed(*count, blocklens, indices, simgrid::smpi::Datatype::f2c(*old_type), &tmp); + 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.data(), simgrid::smpi::Datatype::f2c(*old_type), &tmp); if(*ierr == MPI_SUCCESS) { - *newtype = tmp->add_f(); + *newtype = tmp->c2f(); } } @@ -140,7 +146,7 @@ void mpi_type_create_hindexed_(int* count, int* blocklens, MPI_Aint* indices, in MPI_Datatype tmp; *ierr = MPI_Type_create_hindexed(*count, blocklens, indices, simgrid::smpi::Datatype::f2c(*old_type), &tmp); if(*ierr == MPI_SUCCESS) { - *newtype = tmp->add_f(); + *newtype = tmp->c2f(); } } @@ -149,7 +155,7 @@ void mpi_type_create_hindexed_block_ (int* count, int* blocklength, MPI_Aint* in MPI_Datatype tmp; *ierr = MPI_Type_create_hindexed_block(*count, *blocklength, indices, simgrid::smpi::Datatype::f2c(*old_type), &tmp); if(*ierr == MPI_SUCCESS) { - *newtype = tmp->add_f(); + *newtype = tmp->c2f(); } } @@ -157,7 +163,7 @@ void mpi_type_indexed_ (int* count, int* blocklens, int* indices, int* old_type, MPI_Datatype tmp; *ierr = MPI_Type_indexed(*count, blocklens, indices, simgrid::smpi::Datatype::f2c(*old_type), &tmp); if(*ierr == MPI_SUCCESS) { - *newtype = tmp->add_f(); + *newtype = tmp->c2f(); } } @@ -165,7 +171,7 @@ void mpi_type_create_indexed_(int* count, int* blocklens, int* indices, int* old MPI_Datatype tmp; *ierr = MPI_Type_create_indexed(*count, blocklens, indices, simgrid::smpi::Datatype::f2c(*old_type), &tmp); if(*ierr == MPI_SUCCESS) { - *newtype = tmp->add_f(); + *newtype = tmp->c2f(); } } @@ -174,36 +180,34 @@ void mpi_type_create_indexed_block_ (int* count, int* blocklength, int* indices, MPI_Datatype tmp; *ierr = MPI_Type_create_indexed_block(*count, *blocklength, indices, simgrid::smpi::Datatype::f2c(*old_type), &tmp); if(*ierr == MPI_SUCCESS) { - *newtype = tmp->add_f(); + *newtype = tmp->c2f(); } } -void mpi_type_struct_ (int* count, int* blocklens, MPI_Aint* indices, int* old_types, int* newtype, int* ierr) { +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))); - 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, types, &tmp); + *ierr = MPI_Type_struct(*count, blocklens, indices_aint.data(), types.data(), &tmp); if(*ierr == MPI_SUCCESS) { - *newtype = tmp->add_f(); + *newtype = tmp->c2f(); } - xbt_free(types); } 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(); + *newtype = tmp->c2f(); } - xbt_free(types); } void mpi_pack_ (void* inbuf, int* incount, int* type, void* outbuf, int* outcount, int* position, int* comm, int* ierr) { @@ -251,7 +255,7 @@ void mpi_type_create_darray_ (int* size, int* rank, int* ndims, int* array_of_gs array_of_distribs, array_of_dargs, array_of_psizes, *order, simgrid::smpi::Datatype::f2c(*oldtype), &tmp) ; if(*ierr == MPI_SUCCESS) { - *newtype = tmp->add_f(); + *newtype = tmp->c2f(); } } @@ -259,7 +263,7 @@ void mpi_type_create_resized_ (int* oldtype,MPI_Aint* lb, MPI_Aint* extent, int* MPI_Datatype tmp; *ierr = MPI_Type_create_resized(simgrid::smpi::Datatype::f2c(*oldtype),*lb, *extent, &tmp); if(*ierr == MPI_SUCCESS) { - *newtype = tmp->add_f(); + *newtype = tmp->c2f(); } } @@ -269,7 +273,7 @@ void mpi_type_create_subarray_ (int* ndims,int *array_of_sizes, int *array_of_su *ierr = MPI_Type_create_subarray(*ndims,array_of_sizes, array_of_subsizes, array_of_starts, *order, simgrid::smpi::Datatype::f2c(*oldtype), &tmp); if(*ierr == MPI_SUCCESS) { - *newtype = tmp->add_f(); + *newtype = tmp->c2f(); } } @@ -280,6 +284,4 @@ void mpi_type_match_size_ (int* typeclass,int* size,int* datatype, int* ierr){ *datatype = tmp->c2f(); } } - - }