Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'pikachuyann/simgrid-xbt_random'
[simgrid.git] / src / smpi / mpi / smpi_keyvals.cpp
1 /* Copyright (c) 2007-2020. The SimGrid Team.
2  * All rights reserved.                                                     */
3
4 /* This program is free software; you can redistribute it and/or modify it
5  * under the terms of the license (GNU LGPL) which comes with this package. */
6
7 //#include "private.hpp"
8 #include "smpi_keyvals.hpp"
9
10 namespace simgrid{
11 namespace smpi{
12
13 std::unordered_map<int, void*>* Keyval::attributes(){
14   return &attributes_;
15 }
16
17 template <>
18 int Keyval::call_deleter<Comm>(Comm* obj, const s_smpi_key_elem_t* elem, int keyval, void* value, int* /*flag*/)
19 {
20   int ret = MPI_SUCCESS;
21   if(elem->delete_fn.comm_delete_fn!=MPI_NULL_DELETE_FN)
22     ret = elem->delete_fn.comm_delete_fn(obj, keyval, value, elem->extra_state);
23   else if(elem->delete_fn.comm_delete_fn_fort!=MPI_NULL_DELETE_FN)
24     elem->delete_fn.comm_delete_fn_fort(obj, keyval, value, elem->extra_state, &ret);
25   return ret;
26 }
27
28 template <>
29 int Keyval::call_deleter<Win>(Win* obj, const s_smpi_key_elem_t* elem, int keyval, void* value, int* /*flag*/)
30 {
31   int ret = MPI_SUCCESS;
32   if(elem->delete_fn.win_delete_fn!=MPI_NULL_DELETE_FN)
33     ret = elem->delete_fn.win_delete_fn(obj, keyval, value, elem->extra_state);
34   else if(elem->delete_fn.win_delete_fn_fort!=MPI_NULL_DELETE_FN)
35     elem->delete_fn.win_delete_fn_fort(obj, keyval, value, elem->extra_state, &ret);
36   return ret;
37 }
38
39 template <>
40 int Keyval::call_deleter<Datatype>(Datatype* obj, const s_smpi_key_elem_t* elem, int keyval, void* value, int* /*flag*/)
41 {
42   int ret = MPI_SUCCESS;
43   if(elem->delete_fn.type_delete_fn!=MPI_NULL_DELETE_FN)
44     ret = elem->delete_fn.type_delete_fn(obj, keyval, value, elem->extra_state);
45   else if(elem->delete_fn.type_delete_fn_fort!=MPI_NULL_DELETE_FN)
46     elem->delete_fn.type_delete_fn_fort(obj, keyval, value, elem->extra_state, &ret);
47   return ret;
48 }
49
50 }
51 }