1 /* Copyright (c) 2007-2023. The SimGrid Team.
2 * All rights reserved. */
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. */
7 #include "smpi_keyvals.hpp"
8 #include "xbt/sysdep.h"
10 namespace simgrid::smpi {
12 template <> int Keyval::call_deleter<Comm>(Comm* obj, const smpi_key_elem& elem, int keyval, void* value, int* /*flag*/)
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);
24 template <> int Keyval::call_deleter<Win>(Win* obj, const smpi_key_elem& elem, int keyval, void* value, int* /*flag*/)
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);
37 int Keyval::call_deleter<Datatype>(Datatype* obj, const smpi_key_elem& elem, int keyval, void* value, int* /*flag*/)
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);
49 } // namespace simgrid::smpi