X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d953273545cd7bbe42006f790a2295bf3782878a..7be7f7c22afeb0448875283a0a252f2a941f4eef:/src/smpi/include/smpi_f2c.hpp diff --git a/src/smpi/include/smpi_f2c.hpp b/src/smpi/include/smpi_f2c.hpp index 97f3eb322b..c839d1cd40 100644 --- a/src/smpi/include/smpi_f2c.hpp +++ b/src/smpi/include/smpi_f2c.hpp @@ -9,6 +9,7 @@ #ifndef SMPI_F2C_HPP_INCLUDED #define SMPI_F2C_HPP_INCLUDED +#include #include namespace simgrid{ @@ -16,21 +17,26 @@ namespace smpi{ class F2C { private: + using f2c_lookup_type = std::unordered_map; + // We use a single lookup table for every type. // Beware of collisions if id in mpif.h is not unique - static std::unordered_map* f2c_lookup_; + static std::unique_ptr f2c_lookup_; static int f2c_id_; - static std::unordered_map::size_type num_default_handles_; + static f2c_lookup_type::size_type num_default_handles_; int my_f2c_id_ = -1; protected: - static void set_f2c_lookup(std::unordered_map* map) { f2c_lookup_ = map; } + static void allocate_lookup() + { + if (not f2c_lookup_) + f2c_lookup_ = std::make_unique(); + } static int f2c_id() { return f2c_id_; } static void f2c_id_increment() { f2c_id_++; } public: - static void delete_lookup() { delete f2c_lookup_; f2c_lookup_ = nullptr ;} - static std::unordered_map* lookup() { return f2c_lookup_; } + static f2c_lookup_type* lookup() { return f2c_lookup_.get(); } F2C(); virtual ~F2C() = default; @@ -42,7 +48,7 @@ public: // For the default one, the MPI_*_NULL returned is assumed to be NULL. static F2C* f2c(int id); static void finish_initialization() { num_default_handles_ = f2c_lookup_->size(); } - static std::unordered_map::size_type get_num_default_handles() { return num_default_handles_;} + static f2c_lookup_type::size_type get_num_default_handles() { return num_default_handles_; } }; }