X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/0bb767878b9cec002756d922fc6c68ba9f606f6f..2155dbd23cfe5c344d2ac177e7bfee31e9259ff9:/src/smpi/smpi_group.cpp diff --git a/src/smpi/smpi_group.cpp b/src/smpi/smpi_group.cpp index f8f2f86a96..bf305775e1 100644 --- a/src/smpi/smpi_group.cpp +++ b/src/smpi/smpi_group.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2010, 2013-2015. The SimGrid Team. +/* Copyright (c) 2010, 2013-2017. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -7,7 +7,8 @@ #include "private.h" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_group, smpi, "Logging specific to SMPI (group)"); - Group mpi_MPI_GROUP_EMPTY; + +simgrid::smpi::Group mpi_MPI_GROUP_EMPTY; MPI_Group MPI_GROUP_EMPTY=&mpi_MPI_GROUP_EMPTY; namespace simgrid{ @@ -64,13 +65,6 @@ Group::~Group() xbt_dict_free(&index_to_rank_map_); } -void Group::destroy() -{ - if(this != MPI_COMM_WORLD->group() - && this != MPI_GROUP_EMPTY) - this->unuse(); -} - void Group::set_mapping(int index, int rank) { int * val_rank; @@ -112,20 +106,17 @@ int Group::rank(int index) return *ptr_rank; } -int Group::use() +void Group::ref() { refcount_++; - return refcount_; } -int Group::unuse() +void Group::unref(Group* group) { - refcount_--; - if (refcount_ <= 0) { - delete this; - return 0; + group->refcount_--; + if (group->refcount_ <= 0) { + delete group; } - return refcount_; } int Group::size() @@ -172,7 +163,7 @@ int Group::incl(int n, int* ranks, MPI_Group* newgroup) if(this!= MPI_COMM_WORLD->group() && this != MPI_COMM_SELF->group() && this != MPI_GROUP_EMPTY) - this->use(); + this->ref(); } else { *newgroup = new Group(n); for (i = 0; i < n; i++) { @@ -389,5 +380,16 @@ int Group::range_excl(int n, int ranges[][3], MPI_Group * newgroup){ return MPI_SUCCESS; } +MPI_Group Group::f2c(int id) { + if(id == -2) { + return MPI_GROUP_EMPTY; + } else if(F2C::f2c_lookup() != nullptr && id >= 0) { + char key[KEY_SIZE]; + return static_cast(xbt_dict_get_or_null(F2C::f2c_lookup(), get_key(key, id))); + } else { + return static_cast(MPI_GROUP_NULL); + } +} + } }