Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Use const& for the parameters of type std::string not affected by previous commit.
[simgrid.git] / src / smpi / include / smpi_datatype.hpp
index e96134e..61af1d5 100644 (file)
@@ -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 <string>
 
 #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<int, smpi_key_elem> 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,8 @@ 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);
@@ -127,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);
 };