45 #include <type_traits>
65 virtual const char*
what()
const throw() {
return "FutureThreadError\n";}
69 virtual const char*
what()
const throw() {
return "FutureWhenError\n";}
229 namespace FutureHelper {
238 mutable std::unique_ptr<const Cgu::Callback::CallbackArg<const Val&>>
when;
243 when(std::move(when_)) {}
254 mutable std::unique_ptr<Cgu::SafeEmitterArg<const Val&>>
when;
259 when(std::move(when_)) {}
269 std::unique_ptr<Cgu::Thread::Thread> thread_u;
270 std::unique_ptr<Cgu::Callback::Callback> cb_u;
280 template <
class T,
class Ret,
class... Args>
281 void run_wrapper(T*, Ret (T::*)(Args...),
const Args&...);
283 template <
class T,
class Ret,
class... Args>
284 void run_wrapper_const(
const T*, Ret (T::*)(Args...)
const,
const Args&...);
286 template <
class Ret,
class... Args>
287 void run_wrapper_static(Ret (*)(Args...),
const Args&...);
289 template <
class Func>
290 void run_wrapper_functor(Func&);
292 void cancel_cleanup();
296 gint, GMainContext*);
299 gint, GMainContext*);
305 const std::unique_ptr<const Cgu::Callback::Callback>& func,
309 Future(): val(), done(
false), running(
false), error(
false), emitter_error(
false) {}
357 template <
class Ret,
class T>
393 template <
class Ret,
class Param1,
class Arg1,
class T>
395 Ret (T::*func)(Param1),
430 template <
class Ret,
class Param1,
class Param2,
class Arg1,
class Arg2,
class T>
432 Ret (T::*func)(Param1, Param2),
468 template <
class Ret,
class Param1,
class Param2,
class Param3,
469 class Arg1,
class Arg2,
class Arg3,
class T>
471 Ret (T::*func)(Param1, Param2, Param3),
507 template <
class Ret,
class T>
509 Ret (T::*func)()
const);
543 template <
class Ret,
class Param1,
class Arg1,
class T>
545 Ret (T::*func)(Param1)
const,
580 template <
class Ret,
class Param1,
class Param2,
class Arg1,
class Arg2,
class T>
582 Ret (T::*func)(Param1, Param2)
const,
618 template <
class Ret,
class Param1,
class Param2,
class Param3,
619 class Arg1,
class Arg2,
class Arg3,
class T>
621 Ret (T::*func)(Param1, Param2, Param3)
const,
692 template <
class Ret,
class Param1,
class Arg1>
728 template <
class Ret,
class Param1,
class Param2,
class Arg1,
class Arg2>
765 template <
class Ret,
class Param1,
class Param2,
class Param3,
766 class Arg1,
class Arg2,
class Arg3>
804 template <
class Ret,
class Param1,
class Param2,
class Param3,
class Param4,
805 class Arg1,
class Arg2,
class Arg3,
class Arg4>
849 template <
class Func>
1189 gint priority = G_PRIORITY_DEFAULT,
1190 GMainContext* context = 0);
1335 template <
class When,
1336 class =
typename std::enable_if<!std::is_convertible<typename std::remove_reference<When>::type,
1339 gint priority = G_PRIORITY_DEFAULT,
1340 GMainContext* context = 0) {
1341 return when(Callback::lambda<const Val&>(std::forward<When>(w)),
1461 gint priority = G_PRIORITY_DEFAULT,
1462 GMainContext* context = 0);
1589 template <
class When,
1590 class =
typename std::enable_if<!std::is_convertible<typename std::remove_reference<When>::type,
1594 gint priority = G_PRIORITY_DEFAULT,
1595 GMainContext* context = 0) {
1596 return when(Callback::lambda<const Val&>(std::forward<When>(w)),
1697 GMainContext* context = 0);
1800 template <
class Fail,
1801 class =
typename std::enable_if<!std::is_convertible<typename std::remove_reference<Fail>::type,
1804 GMainContext* context = 0) {
1805 fail(Callback::lambda<>(std::forward<Fail>(f)),
1881 GMainContext* context = 0);
1962 template <
class Fail,
1963 class =
typename std::enable_if<!std::is_convertible<typename std::remove_reference<Fail>::type,
1967 GMainContext* context = 0) {
1968 fail(Callback::lambda<>(std::forward<Fail>(f)),
2148 template <
class Obj,
class Ret,
class... Params,
class... Args>
2150 Ret (Obj::*func)(Params...),
2190 template <
class Obj,
class Ret,
class... Params,
class... Args>
2192 Ret (Obj::*func)(Params...)
const,
2232 template <
class Ret,
class... Params,
class... Args>
2294 template <
class Ret,
class Func>
2302 #ifndef DOXYGEN_PARSING
2303 template <
class Func>
2313 #include <c++-gtk-utils/future.tpp>