X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/879d8b9db2bb799b0013ec9740ed10067505f7f4..10ee8f063aa0963534a92ad74c2bf23a9afaa2ae:/src/smpi/include/smpi_f2c.hpp diff --git a/src/smpi/include/smpi_f2c.hpp b/src/smpi/include/smpi_f2c.hpp index 49f7828fd0..0b96ef944f 100644 --- a/src/smpi/include/smpi_f2c.hpp +++ b/src/smpi/include/smpi_f2c.hpp @@ -1,6 +1,6 @@ /* Handle Fortan - C conversion for MPI Types*/ -/* 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 @@ -9,7 +9,8 @@ #ifndef SMPI_F2C_HPP_INCLUDED #define SMPI_F2C_HPP_INCLUDED -#include "xbt/dict.h" +#include +#include #define KEY_SIZE (sizeof(int) * 2 + 1) @@ -20,24 +21,29 @@ class F2C { private: // We use a single lookup table for every type. // Beware of collisions if id in mpif.h is not unique - static xbt_dict_t f2c_lookup_; + static std::unordered_map* f2c_lookup_; static int f2c_id_; + int my_f2c_id_ = -1; + protected: - static xbt_dict_t f2c_lookup(); - static void set_f2c_lookup(xbt_dict_t dict); + static std::unordered_map* f2c_lookup(); + static void set_f2c_lookup(std::unordered_map* map); static int f2c_id(); static void f2c_id_increment(); + public: + char* get_my_key(char* key); static char* get_key(char* key, int id); - static char* get_key_id(char* key, int id); static void delete_lookup(); - static xbt_dict_t lookup(); + static std::unordered_map* lookup(); + F2C() {} + virtual ~F2C() = default; //Override these to handle specific values. - int add_f(); + virtual int add_f(); static void free_f(int id); - int c2f(); - + virtual 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);