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
+ */
+ int id = -1;
size_t size_;
MPI_Aint lb_;
MPI_Aint ub_;
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);
static void unref(MPI_Datatype datatype);
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();
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);
};