Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of https://framagit.org/simgrid/simgrid
[simgrid.git] / src / smpi / mpi / smpi_keyvals.cpp
index 559ef5c..d22bbf2 100644 (file)
@@ -1,10 +1,10 @@
-/* Copyright (c) 2007-2017. The SimGrid Team.
+/* Copyright (c) 2007-2019. The SimGrid Team.
  * All rights reserved.                                                     */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
  * All rights reserved.                                                     */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-//#include "private.h"
+//#include "private.hpp"
 #include "smpi_keyvals.hpp"
 
 namespace simgrid{
 #include "smpi_keyvals.hpp"
 
 namespace simgrid{
@@ -14,32 +14,35 @@ std::unordered_map<int, void*>* Keyval::attributes(){
   return &attributes_;
 };
 
   return &attributes_;
 };
 
-
-template <> int Keyval::call_deleter<Comm>(Comm* obj, smpi_key_elem elem, int keyval, void * value, int* flag){
-  if(elem->delete_fn.comm_delete_fn!=MPI_NULL_DELETE_FN){
-    int ret = elem->delete_fn.comm_delete_fn(obj, keyval, value, flag);
-    if(ret!=MPI_SUCCESS)
-      return ret;
-  }
-  return MPI_SUCCESS;
+template <> int Keyval::call_deleter<Comm>(Comm* obj, smpi_key_elem elem, int keyval, void* value, int* /*flag*/)
+{
+  int ret = MPI_SUCCESS;
+  if(elem->delete_fn.comm_delete_fn!=MPI_NULL_DELETE_FN)
+    ret = elem->delete_fn.comm_delete_fn(obj, keyval, value, elem->extra_state);
+  else if(elem->delete_fn.comm_delete_fn_fort!=MPI_NULL_DELETE_FN)
+    elem->delete_fn.comm_delete_fn_fort(obj, keyval, value, elem->extra_state, &ret);
+  return ret;
 }
 
 }
 
-template <> int Keyval::call_deleter<Win>(Win* obj, smpi_key_elem elem, int keyval, void * value, int* flag){
-  if(elem->delete_fn.win_delete_fn!=MPI_NULL_DELETE_FN){
-    int ret = elem->delete_fn.win_delete_fn(obj, keyval, value, flag);
-    if(ret!=MPI_SUCCESS)
-      return ret;
-  }
-  return MPI_SUCCESS;
+template <> int Keyval::call_deleter<Win>(Win* obj, smpi_key_elem elem, int keyval, void* value, int* /*flag*/)
+{
+  int ret = MPI_SUCCESS;
+  if(elem->delete_fn.win_delete_fn!=MPI_NULL_DELETE_FN)
+    ret = elem->delete_fn.win_delete_fn(obj, keyval, value, elem->extra_state);
+  else if(elem->delete_fn.win_delete_fn_fort!=MPI_NULL_DELETE_FN)
+    elem->delete_fn.win_delete_fn_fort(obj, keyval, value, elem->extra_state, &ret);
+  return ret;
 }
 
 }
 
-template <> int Keyval::call_deleter<Datatype>(Datatype* obj, smpi_key_elem elem, int keyval, void * value, int* flag){
-  if(elem->delete_fn.type_delete_fn!=MPI_NULL_DELETE_FN){
-    int ret = elem->delete_fn.type_delete_fn(obj, keyval, value, flag);
-    if(ret!=MPI_SUCCESS)
-      return ret;
-  }
-  return MPI_SUCCESS;
+template <>
+int Keyval::call_deleter<Datatype>(Datatype* obj, smpi_key_elem elem, int keyval, void* value, int* /*flag*/)
+{
+  int ret = MPI_SUCCESS;
+  if(elem->delete_fn.type_delete_fn!=MPI_NULL_DELETE_FN)
+    ret = elem->delete_fn.type_delete_fn(obj, keyval, value, elem->extra_state);
+  else if(elem->delete_fn.type_delete_fn_fort!=MPI_NULL_DELETE_FN)
+    elem->delete_fn.type_delete_fn_fort(obj, keyval, value, elem->extra_state, &ret);
+  return ret;
 }
 
 }
 }
 
 }