void Group::set_mapping(s4u::Actor* actor, int rank)
{
if (0 <= rank && rank < size_) {
- int index = actor->get_pid();
- if (index != MPI_UNDEFINED) {
- if ((unsigned)index >= index_to_rank_map_.size())
- index_to_rank_map_.resize(index + 1, MPI_UNDEFINED);
- index_to_rank_map_[index] = rank;
- }
-
+ int index = actor->get_pid();
+ if ((unsigned)index >= index_to_rank_map_.size())
+ index_to_rank_map_.resize(index + 1, MPI_UNDEFINED);
+ index_to_rank_map_[index] = rank;
rank_to_actor_map_[rank] = actor;
actor_to_rank_map_.insert({actor, rank});
}
}
-int Group::rank(int index)
+int Group::rank(int index) const
{
int rank;
if (0 <= index && (unsigned)index < index_to_rank_map_.size())
return rank;
}
-s4u::Actor* Group::actor(int rank)
+s4u::Actor* Group::actor(int rank) const
{
if (0 <= rank && rank < size_)
return rank_to_actor_map_[rank];
return nullptr;
}
-int Group::rank(s4u::Actor* actor)
+int Group::rank(s4u::Actor* actor) const
{
auto iterator = actor_to_rank_map_.find(actor);
//I'm not in the communicator ... but maybe my parent is ?
}
}
-int Group::compare(MPI_Group group2)
+int Group::compare(MPI_Group group2) const
{
int result;
result = MPI_UNEQUAL;
} else {
for (int i = 0; i < size_; i++) {
- s4u::Actor* actor = this->actor(i);
- int rank = group2->rank(actor);
+ int rank = group2->rank(actor(i));
if (rank == MPI_UNDEFINED) {
result = MPI_UNEQUAL;
break;
return result;
}
-int Group::incl(int n, const int* ranks, MPI_Group* newgroup)
+int Group::incl(int n, const int* ranks, MPI_Group* newgroup) const
{
if (n == 0) {
*newgroup = MPI_GROUP_EMPTY;
return MPI_SUCCESS;
}
-int Group::group_union(MPI_Group group2, MPI_Group* newgroup)
+int Group::group_union(MPI_Group group2, MPI_Group* newgroup) const
{
int size1 = size_;
int size2 = group2->size();
return MPI_SUCCESS;
}
-int Group::intersection(MPI_Group group2, MPI_Group* newgroup)
+int Group::intersection(MPI_Group group2, MPI_Group* newgroup) const
{
int size2 = group2->size();
for (int i = 0; i < size2; i++) {
return MPI_SUCCESS;
}
-int Group::difference(MPI_Group group2, MPI_Group* newgroup)
+int Group::difference(MPI_Group group2, MPI_Group* newgroup) const
{
int newsize = size_;
int size2 = size_;
return MPI_SUCCESS;
}
-int Group::excl(int n, const int *ranks, MPI_Group * newgroup){
+int Group::excl(int n, const int* ranks, MPI_Group* newgroup) const
+{
int oldsize = size_;
int newsize = oldsize - n;
*newgroup = new Group(newsize);
return (first <= rank && rank <= last) || (first >= rank && rank >= last);
}
-int Group::range_incl(int n, int ranges[][3], MPI_Group* newgroup)
+int Group::range_incl(int n, int ranges[][3], MPI_Group* newgroup) const
{
std::vector<int> to_incl;
for (int i = 0; i < n; i++)
return MPI_SUCCESS;
}
-int Group::range_excl(int n, int ranges[][3], MPI_Group* newgroup)
+int Group::range_excl(int n, int ranges[][3], MPI_Group* newgroup) const
{
std::vector<bool> to_excl(size_, false);
int newsize = size_;