Datatype::Datatype(int size, MPI_Aint lb, MPI_Aint ub, int flags) : size_(size), lb_(lb), ub_(ub), flags_(flags)
{
this->add_f();
- MC_ignore(&refcount_, sizeof refcount_);
}
// for predefined types, so refcount_ = 0.
: name_(name), id(std::to_string(ident)), size_(size), lb_(lb), ub_(ub), flags_(flags), refcount_(0)
{
id2type_lookup.try_emplace(id, this);
- MC_ignore(&refcount_, sizeof refcount_);
}
Datatype::Datatype(Datatype* datatype, int* ret)
void Datatype::ref()
{
refcount_++;
- MC_ignore(&refcount_, sizeof refcount_);
}
void Datatype::unref(MPI_Datatype datatype)
{
if (datatype->refcount_ > 0)
datatype->refcount_--;
- MC_ignore(&datatype->refcount_, sizeof datatype->refcount_);
if (datatype->refcount_ == 0 && not(datatype->flags_ & DT_FLAG_PREDEFINED))
delete datatype;