X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/2e62e0fcfefb56c9029575c59857e25c5e336e37..8f29d9411160cd90ee8d2541c741daafb3f396c6:/src/smpi/include/smpi_f2c.hpp diff --git a/src/smpi/include/smpi_f2c.hpp b/src/smpi/include/smpi_f2c.hpp index ac5d65b676..ef758dd38a 100644 --- a/src/smpi/include/smpi_f2c.hpp +++ b/src/smpi/include/smpi_f2c.hpp @@ -18,18 +18,19 @@ class F2C { private: // 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::unordered_map* f2c_lookup_; static int f2c_id_; + static std::unordered_map::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 set_f2c_lookup(std::unordered_map* map) { f2c_lookup_ = map; } static int f2c_id() { return f2c_id_; } static void f2c_id_increment() { f2c_id_++; } public: - static void delete_lookup() { delete f2c_lookup_; } - static std::unordered_map* lookup() { return f2c_lookup_; } + static void delete_lookup() { delete f2c_lookup_; f2c_lookup_ = nullptr ;} + static std::unordered_map* lookup() { return f2c_lookup_; } F2C(); virtual ~F2C() = default; @@ -41,6 +42,8 @@ public: // This method should be overridden in all subclasses to avoid casting the result when calling it. // 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_;} }; }