- if(origin != MPI_GROUP_NULL
- && origin != MPI_GROUP_EMPTY)
- {
- size_ = origin->size();
- rank_to_index_map_ = xbt_new(int, size_);
- index_to_rank_map_ = xbt_dict_new_homogeneous(xbt_free_f);
- refcount_ = 1;
- for (int i = 0; i < size_; i++) {
- rank_to_index_map_[i] = origin->rank_to_index_map_[i];
- }
-
- char* key;
- char* ptr_rank;
- xbt_dict_cursor_t cursor = nullptr;
- xbt_dict_foreach(origin->index_to_rank_map_, cursor, key, ptr_rank) {
- int * cp = static_cast<int*>(xbt_malloc(sizeof(int)));
- *cp=*reinterpret_cast<int*>(ptr_rank);
- xbt_dict_set(index_to_rank_map_, key, cp, nullptr);
- }
+ 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;