static std::unordered_map<std::string, simgrid::smpi::Datatype*> id2type_lookup;
#define CREATE_MPI_DATATYPE(name, id, type) \
- static simgrid::smpi::Datatype mpi_##name((char*)#name, id, sizeof(type), /* size */ \
- 0, /* lb */ \
- sizeof(type), /* ub = lb + size */ \
- DT_FLAG_BASIC /* flags */ \
- ); \
- const MPI_Datatype name = &mpi_##name;
+ static simgrid::smpi::Datatype _XBT_CONCAT(mpi_, name)((char*)_XBT_STRINGIFY(name), id, sizeof(type), /* size */ \
+ 0, /* lb */ \
+ sizeof(type), /* ub = lb + size */ \
+ DT_FLAG_BASIC /* flags */ \
+ ); \
+ const MPI_Datatype name = &_XBT_CONCAT(mpi_, name);
#define CREATE_MPI_DATATYPE_NULL(name, id) \
- static simgrid::smpi::Datatype mpi_##name((char*)#name, id, 0, /* size */ \
- 0, /* lb */ \
- 0, /* ub = lb + size */ \
- DT_FLAG_BASIC /* flags */ \
- ); \
- const MPI_Datatype name = &mpi_##name;
+ static simgrid::smpi::Datatype _XBT_CONCAT(mpi_, name)((char*)_XBT_STRINGIFY(name), id, 0, /* size */ \
+ 0, /* lb */ \
+ 0, /* ub = lb + size */ \
+ DT_FLAG_BASIC /* flags */ \
+ ); \
+ const MPI_Datatype name = &_XBT_CONCAT(mpi_, name);
// Predefined data types
CREATE_MPI_DATATYPE(MPI_CHAR, 2, char);
CREATE_MPI_DATATYPE(MPI_REAL8, 40, double);
CREATE_MPI_DATATYPE(MPI_REAL16, 41, long double);
CREATE_MPI_DATATYPE_NULL(MPI_DATATYPE_NULL, -1);
-CREATE_MPI_DATATYPE_NULL(MPI_COMPLEX8, 42);
-CREATE_MPI_DATATYPE_NULL(MPI_COMPLEX16, 43);
-CREATE_MPI_DATATYPE_NULL(MPI_COMPLEX32, 44);
+CREATE_MPI_DATATYPE(MPI_COMPLEX8, 42, float_float);
+CREATE_MPI_DATATYPE(MPI_COMPLEX16, 43, double_double);
+CREATE_MPI_DATATYPE(MPI_COMPLEX32, 44, double_double);
CREATE_MPI_DATATYPE(MPI_INTEGER1, 45, int);
CREATE_MPI_DATATYPE(MPI_INTEGER2, 46, int16_t);
CREATE_MPI_DATATYPE(MPI_INTEGER4, 47, int32_t);
{
flags_ &= ~DT_FLAG_PREDEFINED;
*ret = MPI_SUCCESS;
- if(datatype->name_)
- name_ = xbt_strdup(datatype->name_);
if (not datatype->attributes()->empty()) {
int flag=0;
strncpy(name, name_, *length+1);
}
-void Datatype::set_name(char* name){
+void Datatype::set_name(const char* name){
if(name_!=nullptr && (flags_ & DT_FLAG_PREDEFINED) == 0)
xbt_free(name_);
name_ = xbt_strdup(name);