X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/2807fde4fd1f59c230d69a934634c5dfb77905f2..9e3b2f1d55a07271c05db2ed5b3fec27561097f9:/src/smpi/include/smpi_datatype.hpp diff --git a/src/smpi/include/smpi_datatype.hpp b/src/smpi/include/smpi_datatype.hpp index 2453f1017b..61af1d5a19 100644 --- a/src/smpi/include/smpi_datatype.hpp +++ b/src/smpi/include/smpi_datatype.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2009-2017. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2009-2019. 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. */ @@ -8,6 +8,7 @@ #include "smpi_f2c.hpp" #include "smpi_keyvals.hpp" +#include #define DT_FLAG_DESTROYED 0x0001 /**< user destroyed but some other layers still have a reference */ #define DT_FLAG_COMMITED 0x0002 /**< ready to be used for a send/recv operation */ @@ -76,6 +77,11 @@ namespace smpi{ class Datatype : public F2C, public Keyval{ char* name_; + /* The id here is the (unique) datatype id used for this datastructure. + * It's default value is set to -1 since some code expects this return value + * when no other id has been assigned + */ + std::string id = "-1"; size_t size_; MPI_Aint lb_; MPI_Aint ub_; @@ -86,6 +92,8 @@ public: static std::unordered_map keyvals_; static int keyval_id_; + Datatype(int id, int size, MPI_Aint lb, MPI_Aint ub, int flags); + Datatype(char* name, int id, int size, MPI_Aint lb, MPI_Aint ub, int flags); Datatype(int size, MPI_Aint lb, MPI_Aint ub, int flags); Datatype(char* name, int size, MPI_Aint lb, MPI_Aint ub, int flags); Datatype(Datatype* datatype, int* ret); @@ -103,6 +111,9 @@ public: void commit(); bool is_valid(); bool is_basic(); + static const char* encode(MPI_Datatype dt); + static MPI_Datatype decode(const std::string& datatype_id); + bool is_replayable(); void addflag(int flag); int extent(MPI_Aint* lb, MPI_Aint* extent); MPI_Aint get_extent(); @@ -126,7 +137,11 @@ public: MPI_Datatype* new_type); static int create_struct(int count, int* blocklens, MPI_Aint* indices, MPI_Datatype* old_types, MPI_Datatype* new_type); - + static int create_subarray(int ndims, int* array_of_sizes, + int* array_of_subsizes, int* array_of_starts, + int order, MPI_Datatype oldtype, MPI_Datatype *newtype); + static int create_resized(MPI_Datatype oldtype,MPI_Aint lb, MPI_Aint extent, + MPI_Datatype *newtype); static Datatype* f2c(int id); };