/* This is actually a map from int to int. We could use std::map here, but looking up a value there costs O(log(n)).
* For a vector, this costs O(1). We hence go with the vector.
*/
- std::vector<s4u::ActorPtr> rank_to_actor_map_;
- std::map<s4u::ActorPtr, int> actor_to_rank_map_;
+ std::vector<s4u::Actor*> rank_to_actor_map_;
+ std::map<s4u::Actor*, int> actor_to_rank_map_;
std::vector<int> index_to_rank_map_;
int refcount_ = 1; /* refcount_: start > 0 so that this group never gets freed */
void set_mapping(s4u::ActorPtr actor, int rank);
int rank(int index);
s4u::ActorPtr actor(int rank);
- int rank(const s4u::ActorPtr process);
+ int rank(s4u::ActorPtr process);
void ref();
static void unref(MPI_Group group);
int size() { return size_; }
}
}
-void Group::set_mapping(s4u::ActorPtr actor, int rank)
+void Group::set_mapping(s4u::ActorPtr actor_ptr, int rank)
{
+ s4u::Actor* actor = actor_ptr.get();
if (0 <= rank && rank < size_) {
int index = actor->get_pid();
if (index != MPI_UNDEFINED) {
}
rank_to_actor_map_[rank] = actor;
- if (actor != nullptr) {
- actor_to_rank_map_.insert({actor, rank});
- }
+ actor_to_rank_map_.insert({actor, rank});
}
}
return nullptr;
}
-int Group::rank(const s4u::ActorPtr actor)
+int Group::rank(s4u::ActorPtr actor)
{
- auto iterator = actor_to_rank_map_.find(actor);
+ auto iterator = actor_to_rank_map_.find(actor.get());
return (iterator == actor_to_rank_map_.end()) ? MPI_UNDEFINED : (*iterator).second;
}