Interface Documentation
Version: 2.-1 (devel)
tuple_function.hh
Go to the documentation of this file.
1 /*
2  @@@@@@@@ @@ @@@@@@ @@@@@@@@ @@
3  /@@///// /@@ @@////@@ @@////// /@@
4  /@@ /@@ @@@@@ @@ // /@@ /@@
5  /@@@@@@@ /@@ @@///@@/@@ /@@@@@@@@@/@@
6  /@@//// /@@/@@@@@@@/@@ ////////@@/@@
7  /@@ /@@/@@//// //@@ @@ /@@/@@
8  /@@ @@@//@@@@@@ //@@@@@@ @@@@@@@@ /@@
9  // /// ////// ////// //////// //
10 
11  Copyright (c) 2016, Triad National Security, LLC
12  All rights reserved.
13  */
14 #pragma once
15 
18 #include <tuple>
19 
20 namespace flecsi {
21 namespace utils {
22 
23 template<typename T, std::size_t... Is>
24 decltype(auto)
25 tuple_function(T & f, std::tuple<> & t, std::index_sequence<Is...>) {
26  return f(std::get<Is>(t)...);
27 } // tuple_function
28 
29 template<typename T>
30 decltype(auto)
31 tuple_function(T & f, std::tuple<> & t) {
32  return tuple_function(f, t, std::make_integer_sequence<std::size_t, 0>{});
33 } // tuple_function
34 
35 template<typename T, typename... As, std::size_t... Is>
36 decltype(auto)
37 tuple_function(T & f, std::tuple<As...> & t, std::index_sequence<Is...>) {
38  return f(std::get<Is>(t)...);
39 } // tuple_function
40 
41 template<typename T, typename... As>
42 decltype(auto)
43 tuple_function(T & f, std::tuple<As...> & t) {
44  return tuple_function(
45  f, t, std::make_integer_sequence<std::size_t, sizeof...(As)>{});
46 } // tuple_function
47 
48 /*
49 // FIXME: Don't need this
50 template<typename T, typename ... As, std::size_t ... Is>
51 std::function<void()> tuple_function_mpi(T & f, std::tuple<As ...> & t,
52  std::index_sequence<Is ...>) {
53 
54  return std::bind(f, std::get<Is>(t) ...);
55 // ext_legion_handshake_t::instance().shared_func_=shared_func_tmp;
56 // return f(std::get<Is>(t) ...);
57 } // tuple_function
58 
59 template<typename T, typename ... As>
60 std::function<void()> tuple_function_mpi(T & f, std::tuple<As ...> & t) {
61  return tuple_function_mpi(f, t,
62  std::make_integer_sequence<std::size_t, sizeof ... (As)>{});
63 } // tuple_function
64 */
65 
66 } // namespace utils
67 } // namespace flecsi
Definition: default_node.hh:20