X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/2807fde4fd1f59c230d69a934634c5dfb77905f2..2960278de1d9e6497a93e0f614530f78cf1075e3:/src/smpi/include/smpi_datatype.hpp diff --git a/src/smpi/include/smpi_datatype.hpp b/src/smpi/include/smpi_datatype.hpp index 2453f1017b..9318570fdd 100644 --- a/src/smpi/include/smpi_datatype.hpp +++ b/src/smpi/include/smpi_datatype.hpp @@ -76,6 +76,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 +91,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 +110,9 @@ public: void commit(); bool is_valid(); bool is_basic(); + static const char* encode(MPI_Datatype dt); + static MPI_Datatype decode(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 +136,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); };