X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1a64ca4c11a1eb7ba2ecd102f877ac571486a034..0e886d5f40a337fb0746a86df15ede0e871fe7f9:/src/smpi/include/smpi_f2c.hpp diff --git a/src/smpi/include/smpi_f2c.hpp b/src/smpi/include/smpi_f2c.hpp index c839d1cd40..5b10ba78ef 100644 --- a/src/smpi/include/smpi_f2c.hpp +++ b/src/smpi/include/smpi_f2c.hpp @@ -1,6 +1,6 @@ /* Handle Fortran - C conversion for MPI Types*/ -/* Copyright (c) 2010-2021. The SimGrid Team. +/* Copyright (c) 2010-2022. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -11,9 +11,9 @@ #include #include +#include -namespace simgrid{ -namespace smpi{ +namespace simgrid::smpi { class F2C { private: @@ -25,6 +25,8 @@ private: static int f2c_id_; static f2c_lookup_type::size_type num_default_handles_; int my_f2c_id_ = -1; + bool deleted_ = false; + std::string call_location_; protected: static void allocate_lookup() @@ -32,26 +34,30 @@ protected: if (not f2c_lookup_) f2c_lookup_ = std::make_unique(); } - static int f2c_id() { return f2c_id_; } + int f2c_id() const { return my_f2c_id_; } + static int global_f2c_id() { return f2c_id_; } static void f2c_id_increment() { f2c_id_++; } public: + void mark_as_deleted() { deleted_ = true; }; + bool deleted() const { return deleted_; } static f2c_lookup_type* lookup() { return f2c_lookup_.get(); } F2C(); virtual ~F2C() = default; + virtual std::string name() const = 0; int add_f(); - static void free_f(int id) { f2c_lookup_->erase(id); } + static void free_f(int id) { if(id!=-1) f2c_lookup_->erase(id); } int c2f(); - static void print_f2c_lookup(); + // 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 f2c_lookup_type::size_type get_num_default_handles() { return num_default_handles_; } + const std::string& call_location() const { return call_location_; } }; -} -} +} // namespace simgrid::smpi #endif