Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
remove useless unspecialized template which was causing troubles with optimizations.
[simgrid.git] / src / smpi / smpi_datatype.hpp
index b639ceb..c652695 100644 (file)
@@ -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<int, smpi_key_elem> 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);