X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/7cd237f9659b2df47fca65a4340ca7b5407f46a0..b01173b82d64fa12bef1afd2a3f9b3b1259296c5:/src/smpi/include/smpi_datatype.hpp diff --git a/src/smpi/include/smpi_datatype.hpp b/src/smpi/include/smpi_datatype.hpp index b55f3aa473..5e387bab81 100644 --- a/src/smpi/include/smpi_datatype.hpp +++ b/src/smpi/include/smpi_datatype.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2009-2019. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2009-2020. 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. */ @@ -75,6 +75,23 @@ struct integer128_t { namespace simgrid{ namespace smpi{ +class Datatype_contents { + public: + int combiner_; + int number_of_integers_; + int* integers_; + int number_of_addresses_; + MPI_Aint* addresses_; + int number_of_datatypes_; + MPI_Datatype* datatypes_; + Datatype_contents(int combiner, + int number_of_integers, const int* integers, + int number_of_addresses, const MPI_Aint* addresses, + int number_of_datatypes, const MPI_Datatype* datatypes); + Datatype_contents(const Datatype_contents&) = delete; + Datatype_contents& operator=(const Datatype_contents&) = delete; + ~Datatype_contents(); +}; class Datatype : public F2C, public Keyval{ char* name_ = nullptr; @@ -92,6 +109,7 @@ class Datatype : public F2C, public Keyval{ public: static std::unordered_map keyvals_; static int keyval_id_; + Datatype_contents* contents_ = nullptr; 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); @@ -124,6 +142,7 @@ public: void set_name(const char* name); static int copy(const void* sendbuf, int sendcount, MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype); + virtual MPI_Datatype clone(); virtual void serialize(const void* noncontiguous, void* contiguous, int count); virtual void unserialize(const void* contiguous, void* noncontiguous, int count, MPI_Op op); static int keyval_create(MPI_Type_copy_attr_function* copy_fn, MPI_Type_delete_attr_function* delete_fn, int* keyval, @@ -131,7 +150,11 @@ public: static int keyval_free(int* keyval); int pack(const void* inbuf, int incount, void* outbuf, int outcount, int* position, const Comm* comm); int unpack(const void* inbuf, int insize, int* position, void* outbuf, int outcount, const Comm* comm); - + int get_contents(int max_integers, int max_addresses, + int max_datatypes, int* array_of_integers, MPI_Aint* array_of_addresses, + MPI_Datatype *array_of_datatypes); + int get_envelope(int* num_integers, int* num_addresses, + int* num_datatypes, int* combiner); static int create_contiguous(int count, MPI_Datatype old_type, MPI_Aint lb, MPI_Datatype* new_type); static int create_vector(int count, int blocklen, int stride, MPI_Datatype old_type, MPI_Datatype* new_type); static int create_hvector(int count, int blocklen, MPI_Aint stride, MPI_Datatype old_type, MPI_Datatype* new_type);