Logo AND Algorithmique Numérique Distribuée

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