X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/6fd166d6132c999bfa781b58a5372c7cbdfe36b2..3c21f9a5558132308c3d0db9dd91fbca8dfa2f43:/src/smpi/smpi_datatype.hpp diff --git a/src/smpi/smpi_datatype.hpp b/src/smpi/smpi_datatype.hpp index b639ceb920..c652695990 100644 --- a/src/smpi/smpi_datatype.hpp +++ b/src/smpi/smpi_datatype.hpp @@ -11,6 +11,7 @@ #include "private.h" + #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 */ #define DT_FLAG_CONTIGUOUS 0x0004 /**< contiguous datatype */ @@ -77,24 +78,25 @@ typedef struct { namespace simgrid{ namespace smpi{ -class Datatype : public F2C{ +class Datatype : public F2C, public Keyval{ protected: char* name_; size_t size_; MPI_Aint lb_; MPI_Aint ub_; int flags_; - xbt_dict_t attributes_; - int in_use_; + int refcount_; + public: - static MPI_Datatype null_id_; + static std::unordered_map keyvals_; + static int keyval_id_; 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); virtual ~Datatype(); - void use(); - void unuse(); + void ref(); + static void unref(MPI_Datatype datatype); void commit(); bool is_valid(); size_t size(); @@ -113,9 +115,6 @@ class Datatype : public F2C{ int count); virtual void unserialize( void* contiguous, void *noncontiguous, int count, MPI_Op op); - int attr_delete(int keyval); - int attr_get(int keyval, void* attr_value, int* flag); - int attr_put(int keyval, void* attr_value); static int keyval_create(MPI_Type_copy_attr_function* copy_fn, MPI_Type_delete_attr_function* delete_fn, int* keyval, void* extra_state); static int keyval_free(int* keyval); int pack(void* inbuf, int incount, void* outbuf, int outcount, int* position, MPI_Comm comm);