-/* 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. */
#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 */
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_;
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);
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);