X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/b01173b82d64fa12bef1afd2a3f9b3b1259296c5..d7eeb7a56fc0495d5568e407f1ee9161fc233b5f:/src/smpi/bindings/smpi_pmpi_type.cpp diff --git a/src/smpi/bindings/smpi_pmpi_type.cpp b/src/smpi/bindings/smpi_pmpi_type.cpp index 74cd22d96c..c82e82cefc 100644 --- a/src/smpi/bindings/smpi_pmpi_type.cpp +++ b/src/smpi/bindings/smpi_pmpi_type.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2007-2020. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2007-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. */ @@ -17,6 +17,7 @@ int PMPI_Type_free(MPI_Datatype * datatype) return MPI_ERR_TYPE; } else { simgrid::smpi::Datatype::unref(*datatype); + *datatype=MPI_DATATYPE_NULL; return MPI_SUCCESS; } } @@ -45,11 +46,27 @@ int PMPI_Type_get_extent(MPI_Datatype datatype, MPI_Aint * lb, MPI_Aint * extent return datatype->extent(lb, extent); } +int PMPI_Type_get_extent_x(MPI_Datatype datatype, MPI_Count * lb, MPI_Count * extent) +{ + MPI_Aint tmplb, tmpext; + int ret = PMPI_Type_get_extent(datatype, &tmplb, &tmpext); + if(ret == MPI_SUCCESS){ + *lb = static_cast(tmplb); + *extent = static_cast(tmpext); + } + return ret; +} + int PMPI_Type_get_true_extent(MPI_Datatype datatype, MPI_Aint * lb, MPI_Aint * extent) { return PMPI_Type_get_extent(datatype, lb, extent); } +int PMPI_Type_get_true_extent_x(MPI_Datatype datatype, MPI_Count * lb, MPI_Count * extent) +{ + return PMPI_Type_get_extent_x(datatype, lb, extent); +} + int PMPI_Type_extent(MPI_Datatype datatype, MPI_Aint * extent) { CHECK_MPI_NULL(1, MPI_DATATYPE_NULL, MPI_ERR_TYPE, datatype) @@ -77,7 +94,7 @@ int PMPI_Type_ub(MPI_Datatype datatype, MPI_Aint * disp) int PMPI_Type_dup(MPI_Datatype datatype, MPI_Datatype *newtype){ int retval = MPI_SUCCESS; CHECK_MPI_NULL(1, MPI_DATATYPE_NULL, MPI_ERR_TYPE, datatype) - *newtype = datatype->clone(); + retval = datatype->clone(newtype); //error when duplicating, free the new datatype if(retval!=MPI_SUCCESS){ simgrid::smpi::Datatype::unref(*newtype); @@ -135,7 +152,7 @@ int PMPI_Type_create_indexed_block(int count, int blocklength, const int* indice { CHECK_COUNT(1, count) CHECK_MPI_NULL(4, MPI_DATATYPE_NULL, MPI_ERR_TYPE, old_type) - int* blocklens=static_cast(xbt_malloc(blocklength*count*sizeof(int))); + auto* blocklens = static_cast(xbt_malloc(blocklength * count * sizeof(int))); for (int i = 0; i < count; i++) blocklens[i]=blocklength; int retval = simgrid::smpi::Datatype::create_indexed(count, blocklens, indices, old_type, new_type); @@ -160,7 +177,7 @@ int PMPI_Type_create_hindexed_block(int count, int blocklength, const MPI_Aint* MPI_Datatype* new_type) { CHECK_COUNT(1, count) CHECK_MPI_NULL(4, MPI_DATATYPE_NULL, MPI_ERR_TYPE, old_type) - int* blocklens=(int*)xbt_malloc(blocklength*count*sizeof(int)); + auto* blocklens = static_cast(xbt_malloc(blocklength * count * sizeof(int))); for (int i = 0; i < count; i++) blocklens[i] = blocklength; int retval = simgrid::smpi::Datatype::create_hindexed(count, blocklens, indices, old_type, new_type);