private:
std::unordered_map<int, void*> attributes_;
protected:
- std::unordered_map<int, void*>* attributes();
+ std::unordered_map<int, void*>& attributes() { return attributes_; }
+
public:
// Each subclass should have two members, as we want to separate the ones for Win, Comm, and Datatypes :
// static std::unordered_map<int, smpi_key_elem> keyvals_;
if(ret!=MPI_SUCCESS)
return ret;
}
- if(attributes()->empty())
+ if (attributes().empty())
return MPI_ERR_ARG;
- attributes()->erase(keyval);
+ attributes().erase(keyval);
return MPI_SUCCESS;
}
if(elem==nullptr)
return MPI_ERR_ARG;
- const auto& attribs = attributes();
- auto attr = attribs->find(keyval);
- if (attr != attribs->end()) {
+ auto attr = attributes().find(keyval);
+ if (attr != attributes().end()) {
*static_cast<void**>(attr_value) = attr->second;
*flag=1;
} else {
return MPI_ERR_ARG;
elem->refcount++;
int flag=0;
- auto p = attributes()->insert({keyval, attr_value});
+ auto p = attributes().insert({keyval, attr_value});
if (not p.second) {
int ret = call_deleter<T>((T*)this, elem, keyval,p.first->second,&flag);
// overwrite previous value
template <typename T> void Keyval::cleanup_attr(){
int flag = 0;
- for (auto const& it : attributes_) {
+ for (auto const& it : attributes()) {
auto elm = T::keyvals_.find(it.first);
if (elm != T::keyvals_.end()) {
smpi_key_elem elem = elm->second;
(*newcomm) = new Comm(cp, this->topo());
int ret = MPI_SUCCESS;
- for (auto const& it : *attributes()) {
+ for (auto const& it : attributes()) {
smpi_key_elem elem = keyvals_.at(it.first);
if (elem != nullptr) {
int flag = 0;
if (elem->copy_fn.comm_copy_fn == MPI_COMM_DUP_FN ||
((elem->copy_fn.comm_copy_fn_fort != MPI_NULL_COPY_FN) && *(int*)*elem->copy_fn.comm_copy_fn_fort == 1)) {
elem->refcount++;
- (*newcomm)->attributes()->insert({it.first, it.second});
+ (*newcomm)->attributes().insert({it.first, it.second});
} else if (flag) {
elem->refcount++;
- (*newcomm)->attributes()->insert({it.first, value_out});
+ (*newcomm)->attributes().insert({it.first, value_out});
}
}
}
flags_ &= ~DT_FLAG_PREDEFINED;
int ret = MPI_SUCCESS;
- for (auto const& it : *(datatype->attributes())) {
+ for (auto const& it : datatype->attributes()) {
smpi_key_elem elem = keyvals_.at(it.first);
if (elem != nullptr) {
int flag = 0;
if (elem->copy_fn.type_copy_fn == MPI_TYPE_DUP_FN ||
((elem->copy_fn.type_copy_fn_fort != MPI_NULL_COPY_FN) && (*(int*)*elem->copy_fn.type_copy_fn_fort == 1))) {
elem->refcount++;
- attributes()->insert({it.first, it.second});
+ attributes().insert({it.first, it.second});
} else if (flag) {
elem->refcount++;
- attributes()->insert({it.first, value_out});
+ attributes().insert({it.first, value_out});
}
}
}