Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add new entry in Release_Notes.
[simgrid.git] / src / smpi / mpi / smpi_keyvals.cpp
1 /* Copyright (c) 2007-2023. 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 "smpi_keyvals.hpp"
8 #include "xbt/sysdep.h"
9
10 namespace simgrid::smpi {
11
12 template <> int Keyval::call_deleter<Comm>(Comm* obj, const smpi_key_elem& elem, int keyval, void* value, int* /*flag*/)
13 {
14   int ret = MPI_SUCCESS;
15   if (elem.delete_fn.comm_delete_fn != MPI_NULL_DELETE_FN)
16     ret = elem.delete_fn.comm_delete_fn(obj, keyval, value, elem.extra_state);
17   else if (elem.delete_fn.comm_delete_fn_fort != MPI_NULL_DELETE_FN)
18     elem.delete_fn.comm_delete_fn_fort(obj, keyval, value, elem.extra_state, &ret);
19   if (elem.delete_attr)
20     xbt_free(value);
21   return ret;
22 }
23
24 template <> int Keyval::call_deleter<Win>(Win* obj, const smpi_key_elem& elem, int keyval, void* value, int* /*flag*/)
25 {
26   int ret = MPI_SUCCESS;
27   if (elem.delete_fn.win_delete_fn != MPI_NULL_DELETE_FN)
28     ret = elem.delete_fn.win_delete_fn(obj, keyval, value, elem.extra_state);
29   else if (elem.delete_fn.win_delete_fn_fort != MPI_NULL_DELETE_FN)
30     elem.delete_fn.win_delete_fn_fort(obj, keyval, value, elem.extra_state, &ret);
31   if (elem.delete_attr)
32     xbt_free(value);
33   return ret;
34 }
35
36 template <>
37 int Keyval::call_deleter<Datatype>(Datatype* obj, const smpi_key_elem& elem, int keyval, void* value, int* /*flag*/)
38 {
39   int ret = MPI_SUCCESS;
40   if (elem.delete_fn.type_delete_fn != MPI_NULL_DELETE_FN)
41     ret = elem.delete_fn.type_delete_fn(obj, keyval, value, elem.extra_state);
42   else if (elem.delete_fn.type_delete_fn_fort != MPI_NULL_DELETE_FN)
43     elem.delete_fn.type_delete_fn_fort(obj, keyval, value, elem.extra_state, &ret);
44   if (elem.delete_attr)
45     xbt_free(value);
46   return ret;
47 }
48
49 } // namespace simgrid::smpi