Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
activity::CommImpl: stick to our naming standards for the fields
[simgrid.git] / src / smpi / include / smpi_group.hpp
index 64812ca..1a00853 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2013-2017. The SimGrid Team.
+/* Copyright (c) 2010-2019. The SimGrid Team.
  * All rights reserved.                                                     */
 
 /* This program is free software; you can redistribute it and/or modify it
@@ -8,6 +8,9 @@
 #define SMPI_GROUP_HPP_INCLUDED
 
 #include "smpi_f2c.hpp"
+#include <smpi/smpi.h>
+#include <map>
+#include <vector>
 
 namespace simgrid{
 namespace smpi{
@@ -15,18 +18,24 @@ namespace smpi{
 class Group : public F2C{
   private:
     int size_;
-    int *rank_to_index_map_;
-    xbt_dict_t index_to_rank_map_;
+    /* 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<simgrid::s4u::ActorPtr> rank_to_actor_map_;
+    std::map<simgrid::s4u::ActorPtr, int> actor_to_rank_map_;
+    std::vector<int> index_to_rank_map_;
+
     int refcount_;
   public:
     explicit Group();
     explicit Group(int size);
     explicit Group(Group* origin);
-    ~Group();
 
-    void set_mapping(int index, int rank);
-    int index(int rank);
+    void set_mapping(simgrid::s4u::ActorPtr actor, int rank);
     int rank(int index);
+    simgrid::s4u::ActorPtr actor(int rank);
+    int rank(const simgrid::s4u::ActorPtr process);
     void ref();
     static void unref(MPI_Group group);
     int size();