Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add support for MPI Errhandlers in Comm, File, Win.
[simgrid.git] / src / smpi / include / smpi_comm.hpp
index a71e1f5..828b752 100644 (file)
@@ -8,6 +8,7 @@
 
 #include <list>
 #include <string>
+#include "smpi_errhandler.hpp"
 #include "smpi_keyvals.hpp"
 #include "smpi_group.hpp"
 #include "smpi_topo.hpp"
@@ -31,29 +32,35 @@ class Comm : public F2C, public Keyval{
   std::list<MPI_Win> rma_wins_; // attached windows for synchronization.
   std::string name_;
   MPI_Info info_;
+  int id_;
+  MPI_Errhandler errhandler_;
 
 public:
   static std::unordered_map<int, smpi_key_elem> keyvals_;
   static int keyval_id_;
 
   Comm() = default;
-  Comm(MPI_Group group, MPI_Topology topo, int smp = 0);
+  Comm(MPI_Group group, MPI_Topology topo, int smp = 0, int id=MPI_UNDEFINED);
   int dup(MPI_Comm* newcomm);
   int dup_with_info(MPI_Info info, MPI_Comm* newcomm);
   MPI_Group group();
   MPI_Topology topo() { return topo_; }
   int size();
   int rank();
+  int id();
   void get_name(char* name, int* len);
   void set_name(const char* name);
   MPI_Info info();
   void set_info( MPI_Info info);
+  MPI_Errhandler errhandler();
+  void set_errhandler( MPI_Errhandler errhandler);
   void set_leaders_comm(MPI_Comm leaders);
   void set_intra_comm(MPI_Comm leaders) { intra_comm_ = leaders; };
   int* get_non_uniform_map();
   int* get_leaders_map();
   MPI_Comm get_leaders_comm();
   MPI_Comm get_intra_comm();
+  MPI_Comm find_intra_comm(int* leader);
   int is_uniform();
   int is_blocked();
   int is_smp_comm();
@@ -64,7 +71,6 @@ public:
   static void destroy(MPI_Comm comm);
   void init_smp();
 
-  int add_f() override;
   static void free_f(int id);
   static Comm* f2c(int);