From 41c9a87bfa8a1c81215dca8963e1411cc960198c Mon Sep 17 00:00:00 2001
From: acdemiralp <demiralpali@gmail.com>
Date: Wed, 6 May 2020 13:07:37 +0200
Subject: [PATCH] Progress.

---
 include/boost_mpi_extensions/mpi_detach.hpp | 26 +++++++++------------
 1 file changed, 11 insertions(+), 15 deletions(-)

diff --git a/include/boost_mpi_extensions/mpi_detach.hpp b/include/boost_mpi_extensions/mpi_detach.hpp
index b7118bb..ec99cf4 100644
--- a/include/boost_mpi_extensions/mpi_detach.hpp
+++ b/include/boost_mpi_extensions/mpi_detach.hpp
@@ -184,12 +184,8 @@ struct state
 inline std::optional<state> global_state; // Note: External-linkage optional used as a lazy-initialized stack variable. Must be reset prior to MPI_Finalize.
 }
 
-typedef void MPI_Detach_callback         (void*);
-typedef void MPI_Detach_callback_status  (void*,               MPI_Status*);
-typedef void MPI_Detach_callback_statuses(void*, std::int32_t, MPI_Status*);
-
 // Note: If the test does not succeed immediately, takes the ownership of the request and invalidates it.
-inline std::int32_t MPI_Detach            (                    MPI_Request* request , MPI_Detach_callback*          callback, void*  data)
+inline std::int32_t MPI_Detach            (                    MPI_Request* request , std::function<void(void*)>                            callback, void*  data)
 {
   if (!detail::global_state) detail::global_state.emplace();
 
@@ -208,8 +204,8 @@ inline std::int32_t MPI_Detach            (                    MPI_Request* requ
 
   return MPI_SUCCESS;
 }
-// Note: If the test does not succeed immediately, takes the ownership of the request and invalidates it.
-inline std::int32_t MPI_Detach_status     (                    MPI_Request* request , MPI_Detach_callback_status*   callback, void*  data)
+// Note: If the test does not succeed immediately, takes the ownership of the request and invalidates it.                                   
+inline std::int32_t MPI_Detach_status     (                    MPI_Request* request , std::function<void(void*,               MPI_Status*)> callback, void*  data)
 {
   if (!detail::global_state) detail::global_state.emplace();
 
@@ -229,8 +225,8 @@ inline std::int32_t MPI_Detach_status     (                    MPI_Request* requ
 
   return MPI_SUCCESS;
 }
-// Note: If the test does not succeed immediately, takes the ownership of the requests and invalidates them.
-inline std::int32_t MPI_Detach_each       (std::int32_t count, MPI_Request* requests, MPI_Detach_callback*          callback, void** data)
+// Note: If the test does not succeed immediately, takes the ownership of the requests and invalidates them.                                
+inline std::int32_t MPI_Detach_each       (std::int32_t count, MPI_Request* requests, std::function<void(void*)>                            callback, void** data)
 {
   if (!detail::global_state) detail::global_state.emplace();
 
@@ -252,8 +248,8 @@ inline std::int32_t MPI_Detach_each       (std::int32_t count, MPI_Request* requ
 
   return MPI_SUCCESS;
 }
-// Note: If the test does not succeed immediately, takes the ownership of the requests and invalidates them.
-inline std::int32_t MPI_Detach_each_status(std::int32_t count, MPI_Request* requests, MPI_Detach_callback_status*   callback, void** data)
+// Note: If the test does not succeed immediately, takes the ownership of the requests and invalidates them.                                
+inline std::int32_t MPI_Detach_each_status(std::int32_t count, MPI_Request* requests, std::function<void(void*,               MPI_Status*)> callback, void** data)
 {
   if (!detail::global_state) detail::global_state.emplace();
 
@@ -276,8 +272,8 @@ inline std::int32_t MPI_Detach_each_status(std::int32_t count, MPI_Request* requ
 
   return MPI_SUCCESS;
 }
-// Note: If the test does not succeed immediately, takes the ownership of the requests and invalidates them.
-inline std::int32_t MPI_Detach_all        (std::int32_t count, MPI_Request* requests, MPI_Detach_callback*          callback, void*  data)
+// Note: If the test does not succeed immediately, takes the ownership of the requests and invalidates them.                                
+inline std::int32_t MPI_Detach_all        (std::int32_t count, MPI_Request* requests, std::function<void(void*)>                            callback, void*  data)
 {
   if (!detail::global_state) detail::global_state.emplace();
 
@@ -297,8 +293,8 @@ inline std::int32_t MPI_Detach_all        (std::int32_t count, MPI_Request* requ
 
   return MPI_SUCCESS;
 }
-// Note: If the test does not succeed immediately, takes the ownership of the requests and invalidates them.
-inline std::int32_t MPI_Detach_all_status (std::int32_t count, MPI_Request* requests, MPI_Detach_callback_statuses* callback, void*  data)
+// Note: If the test does not succeed immediately, takes the ownership of the requests and invalidates them.                                
+inline std::int32_t MPI_Detach_all_status (std::int32_t count, MPI_Request* requests, std::function<void(void*, std::int32_t, MPI_Status*)> callback, void*  data)
 {
   if (!detail::global_state) detail::global_state.emplace();
 
-- 
GitLab