6 #ifndef TURI_PARALLEL_EXECUTE_TASK_IN_NATIVE_THREAD_HPP 7 #define TURI_PARALLEL_EXECUTE_TASK_IN_NATIVE_THREAD_HPP 21 namespace native_exec_task_impl {
30 template <
typename F,
typename A1>
35 if (except) std::rethrow_exception(except);
38 template <
typename F,
typename A1,
typename A2>
43 if (except) std::rethrow_exception(except);
46 template <
typename F,
typename A1,
typename A2,
typename A3>
51 if (except) std::rethrow_exception(except);
54 template <
typename F,
typename A1,
typename A2,
typename A3,
typename A4>
57 ret = f(a1, a2, a3, a4);
59 if (except) std::rethrow_exception(except);
62 template <
typename F,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5>
65 ret = f(a1, a2, a3, a4, a5);
67 if (except) std::rethrow_exception(except);
70 template <
typename F,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6>
71 void run_as_native(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) {
73 ret = f(a1, a2, a3, a4, a5, a6);
75 if (except) std::rethrow_exception(except);
78 template <
typename F,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7>
79 void run_as_native(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) {
81 ret = f(a1, a2, a3, a4, a5, a6, a7);
83 if (except) std::rethrow_exception(except);
88 struct value_type<void> {
92 template <
typename F,
typename A1>
97 if (except) std::rethrow_exception(except);
100 template <
typename F,
typename A1,
typename A2>
105 if (except) std::rethrow_exception(except);
108 template <
typename F,
typename A1,
typename A2,
typename A3>
113 if (except) std::rethrow_exception(except);
116 template <
typename F,
typename A1,
typename A2,
typename A3,
typename A4>
121 if (except) std::rethrow_exception(except);
124 template <
typename F,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5>
127 f(a1, a2, a3, a4, a5);
129 if (except) std::rethrow_exception(except);
132 template <
typename F,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6>
133 void run_as_native(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) {
135 f(a1, a2, a3, a4, a5, a6);
137 if (except) std::rethrow_exception(except);
140 template <
typename F,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7>
141 void run_as_native(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) {
143 f(a1, a2, a3, a4, a5, a6, a7);
145 if (except) std::rethrow_exception(except);
155 template <
typename F,
typename ... Args>
156 typename std::result_of<F(Args...)>::type
run_as_native(F f, Args... args) {
157 native_exec_task_impl::value_type<
typename std::result_of<F(Args...)>::type> result;
161 return result.get_result();
std::exception_ptr execute_task_in_native_thread(const std::function< void(void)> &fn)
std::result_of< F(Args...)>::type run_as_native(F f, Args... args)