XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_datatype, smpi, "Logging specific to SMPI (datatype)");
#define CREATE_MPI_DATATYPE(name, type) \
- static Datatype mpi_##name ( \
+ static simgrid::smpi::Datatype mpi_##name ( \
(char*) # name, \
sizeof(type), /* size */ \
0, /* lb */ \
const MPI_Datatype name = &mpi_##name;
#define CREATE_MPI_DATATYPE_NULL(name) \
- static Datatype mpi_##name ( \
+ static simgrid::smpi::Datatype mpi_##name ( \
(char*) # name, \
0, /* size */ \
0, /* lb */ \
*ret = MPI_SUCCESS;
if(datatype->name_)
name_ = xbt_strdup(datatype->name_);
- if(!(datatype->attributes_.empty())){
+
+ if(!(datatype->attributes()->empty())){
int flag;
void* value_out;
- for(auto it = datatype->attributes_.begin(); it != datatype->attributes_.end(); it++){
+ for(auto it = datatype->attributes()->begin(); it != datatype->attributes()->end(); it++){
smpi_key_elem elem = keyvals_.at((*it).first);
if (elem != nullptr && elem->copy_fn.type_copy_fn != MPI_NULL_COPY_FN) {
}
if (flag){
elem->refcount++;
- attributes_.insert({(*it).first, value_out});
+ attributes()->insert({(*it).first, value_out});
}
}
}
return;
}
- if(!attributes_.empty()){
- int flag;
- for(auto it = attributes_.begin(); it != attributes_.end(); it++){
- try{
- smpi_key_elem elem = keyvals_.at((*it).first);
- if (elem != nullptr && elem->delete_fn.type_delete_fn != nullptr)
- elem->delete_fn.type_delete_fn(this, (*it).first, (*it).second, &flag);
- }catch(const std::out_of_range& oor) {
- //already deleted, not a problem;
- }
- }
- }
+ cleanup_attr<Datatype>();
xbt_free(name_);
}
return flags_;
}
+int Datatype::refcount(){
+ return refcount_;
+}
+
void Datatype::addflag(int flag){
flags_ &= flag;
}
}
int Datatype::unpack(void* inbuf, int insize, int* position, void* outbuf, int outcount,MPI_Comm comm){
- if (outcount*(int)size_> insize)
+ if (outcount*static_cast<int>(size_)> insize)
return MPI_ERR_BUFFER;
Datatype::copy(static_cast<char*>(inbuf) + *position, insize, MPI_CHAR, outbuf, outcount, this);
*position += outcount * size_;
void *recvbuf, int recvcount, MPI_Datatype recvtype){
int count;
if(smpi_privatize_global_variables){
- smpi_switch_data_segment(smpi_process_index());
+ smpi_switch_data_segment(smpi_process()->index());
}
/* First check if we really have something to do */
if (recvcount > 0 && recvbuf != sendbuf) {
count = sendcount < recvcount ? sendcount : recvcount;
if(!(sendtype->flags() & DT_FLAG_DERIVED) && !(recvtype->flags() & DT_FLAG_DERIVED)) {
- if(!smpi_process_get_replaying())
+ if(!smpi_process()->replaying())
memcpy(recvbuf, sendbuf, count);
}
else if (!(sendtype->flags() & DT_FLAG_DERIVED))